我有一个class SomeObjectList : public QList<SomeObject*>
我正在创建指向SomeObject
并将它们粘贴在列表中的指针,如下所示:
SomeObjectList MyClass::getSomeObjects()
{
SomeObjectList list;
for( int i=0; i<10; ++i )
{
list << new SomeObject();
}
return list; // Crashes approximately here in QList::~QList
}
我在QList
析构函数中崩溃了,看起来 free() 可能被调用了。我找到了函数的源代码(Qt 4.8.2),它看起来像这样:
template <typename T>
Q_OUTOFLINE_TEMPLATE QList<T>::~QList()
{
if (!d->ref.deref())
free(d);
}
这是否意味着free()
在调用析构函数时正在对列表中剩余的任何指针进行调用?我在其他地方使用过列表没有这个问题。析构函数在什么情况下调用free()
?