私は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()
ますか?