1

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

4

1 に答える 1