c – Qt相当于boost :: ptr_vector?

我需要一个指针容器来获取指针的所有权 – 即当一个元素被删除,或者容器超出范围时,它释放所有指针,就像在boost :: ptr_vector中一样.

的QList< QScopedPointer<抽象类> >不起作用(编译错误,没有复制构造函数?).

现在我正在使用QList< QSharedPointer< AbstractClass> >,但感觉就像一个矫枉过正,其引用计数和多线程的昂贵互斥.

编辑:我刚学到了QPtrList(感谢@ForEveR),这在Qt3中非常相同,但是从以后的版本中删除了.我只是不明白为什么他们会删除它.

最佳答案
你是对的,因为上述原因,QSharedPointer有点开销.

不幸的是,在Qt中没有这样的指针向量,当语言发展并且我们已经有了很好的基元来做类似的工作时,它是否值得添加也有点疑问.

我刚刚与一位Qt核心开发人员进行了快速讨论,似乎今天推荐的解决方案是QSharedPointer或者来自C 11:

std::vector<std::unique_ptr<AbstractClass>>

不要尝试使用QVector而不是std :: vector,因为QVector可能想要复制.

即使在C 11中,也不会尝试使用此解决方案:

QList<QScopedPointer<AbstractClass>>

这里的问题是QList想要复制.当使用任何非const方法时,将调用detach进行复制,而不会编译.

此外,QScopedPointer没有移动构造函数或运算符和that is by design.

转载注明原文:c – Qt相当于boost :: ptr_vector? - 代码日志