我需要一个拥有指针所有权的指针容器——即当一个元素被删除,或者容器超出范围时,它会释放所有指针,就像在 boost::ptr_vector
中一样。 .
QList<QScopedPointer<AbstractClass> >
不起作用(编译错误,没有复制构造函数?)。
现在我正在使用 QList<QSharedPointer<AbstractClass> >
,但它的引用计数和用于多线程的昂贵互斥体感觉有点矫枉过正。
编辑:我刚刚了解到 QPtrList (感谢@ForEveR)这在 Qt3 中非常等效,但已从更高版本中删除。我只是不明白他们为什么要删除它。
最佳答案
您是对的,由于上述原因,QSharedPointer 有点开销。
不幸的是,Qt 中没有这样的指针 vector ,当语言发展并且我们有很好的原语来完成类似的工作时,是否值得添加它也有点疑问。
我刚刚与一位 Qt 核心开发人员进行了快速讨论,今天推荐的解决方案似乎是 QSharedPointer 或 C++11 中的这个:
std::vector<std::unique_ptr<AbstractClass>>
不要尝试使用 QVector 而不是 std::vector,因为 QVector 可能想要复制。
即使在 C++11 中,也不要尝试使用此解决方案:
QList<QScopedPointer<AbstractClass>>
这里的问题是 QList 想要复制。当使用任何非常量方法时,将调用 detach,它会生成拷贝,但不会编译。
此外,QScopedPointer 没有移动构造函数或运算符,并且 that is by design .
关于c++ - Qt 相当于 boost::ptr_vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27523167/