c++ - Qt 相当于 boost::ptr_vector?

标签 c++ qt qtcore qsharedpointer qscopedpointer

我需要一个拥有指针所有权的指针容器——即当一个元素被删除,或者容器超出范围时,它会释放所有指针,就像在 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/

相关文章:

c++ - 在 Windows 中通过 RPC 发送 UDT

c++ - Qt 方法从另一个类调用?

c++ - Qt 5 中类似 Windows DD 的实现

c++ - 如何在 project.pro 中调用带有源代码的嵌套文件夹中的文件?

c++ - 激活多重采样 (Windows) 时如何防止出现空的 OpenGL 窗口?

c++ - Windows api SIZE_T 在内存和控制台中不显示相同的值

c++ - 问题19欧拉计数星期日项目

c++ - 如何在 QTableView 中禁用编辑模式?

c++使用.indexOf在QStringList中查找以 "..."开头的文本

c++ - Qt DBus 属性转换为映射