我QVector<QSharedPointer<SomeData> > DataVec
在一个大型的面向对象项目中作为一类领域。程序在循环执行代码部分期间内存溢出,其中分配了大内存,由 QSharedPointers 控制。
在程序运行周期中,DataVec
填充
DataVec.push_back(QSharedPointer<SomeData>(new SomeData()));
QSharedPointer
调用后将被删除(释放)DataVec.pop.back()
或?DataVec.clear()
我想不是。我们必须显式调用析构函数QSharedPointer
(我在 Qt 中也看不到类似 boost::shared_ptr::reset() 的方法)。然后,如果我们没有更多指向相关实例的指向,SomeData
则将调用默认析构函数(SomeData 只有标准 Qt 容器作为字段),并且内存将被释放。现在,我只做:看来,我只是松散了指向未发布数据的指针(执行后,valgrind 表明我肯定丢失了块,我想它们来自这里)。QSharedPointers
SomeData
pop_back()
所以,最后,我是对的吗?我怎样才能QSharedPointer
以正确的方式从容器中删除?
编辑 1: Qt 中类似 boost::shared_ptr::reset() 的方法是QSharedPointer::clear()
.