私のプログラムでは、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
しかし、削除すると、セグメンテーション違反が発生します。