1

私のプログラムでは、main 関数の最後のステートメントでセグメンテーション フォールトが発生することがあります。

return a.exec();

問題は破壊の順序にある​​と思います。Qtのドキュメントによると

破棄の順序に関係なく、QObject が 2 回削除されることはありません。

しかし、次のコードを試してみると、セグメンテーション違反が発生します。

QWidget* first = new QWidget;
QWidget* second = new QWidget(first);
delete first;
delete second;

いつfirst削除されるかはわかっています。その子secondも削除されます。

では、なぜドキュメンテーションは破棄の順序は重要ではないと言っているのでしょうか?

子オブジェクトの削除には常に注意する必要がありますか?

QNetworkAccessManager でファイルをダウンロードしていますが、ファイルのダウンロードが完了したら、空きメモリDownloaderに継承するオブジェクトを削除したいと考えています。QObjectしかし、削除すると、セグメンテーション違反が発生します。

4

2 に答える 2