繁体   English   中英

非QObject内的Qt容器

[英]Qt containers inside non QObject

使用Qt容器一段时间后,切换回c ++ stl,我发现我对Qt容器更加满意。 有时写stl似乎让我喜欢以一种非常冗长的方式解决重用问题。

所以我只是想知道在一些非QObject派生类中使用Qt容器实例是否有一些副作用

好吧,看看您想要拥有的不同类,并检查是否存在任何依赖关系。 例如, QList不依赖于任何特定的Qt对象,据我所知不是Q_OBJECT ,应该很好。 这里列出的所有其他容器类可能也是如此。

不过,您要做的只是许可。 由于这是在非常特定的规则下可用的代码,因此,例如,您不能简单地采用这些类并在商业应用程序中使用它们。 -编辑:当然,只要您可以动态链接它们,就可以。 我并不是说“不可能”,而是要强调“简单”。

Qt容器可以与“常规”对象一起使用而不会出现问题。 仍然要记住,它们没有利用STL容器使用的某些C ++功能,因此它们可能会对您的类提出其他要求。

例如, QVector (以及其他Qt容器)需要一个默认构造函数,并且在添加元素时,它会执行默认构造+赋值,而STL使用new放置仅使用副本构造函数; 同样,从C ++ 11开始,STL容器支持移动语义,而当前的Qt容器只是在周围复制对象。

对于许多Qt对象而言,这些问题不大,因为“大” Qt对象通常具有“默认”无效状态并使用隐式共享语义(因此默认构造,副本构造函数和赋值通常很便宜),但如果您的对象具有昂贵的副本(可能来自嵌入具有“完整副本”语义的STL容器)。

另外,如果您打算以某种方式分发程序,则应考虑是否值得为容器类引入像Qt这样的繁重依赖项。

如果您执行正确的包含,则应该可以使用它们!

Qt容器与QObject功能完全无关。 Qt本身正在使用许多非QObject派生类的容器QStringList是一个常见示例。 Qt本身也在非QObject派生类的方法中使用容器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM