次のコードを使用して、次MyWindowClass
のサブクラスであるウィンドウを表示しますQDialog
。
//header mainwindow.h
MyWindowClass *myWindow;
//mainwindow.cpp
void MainWindow::on_actionButton_triggered()
{
myWindow = new MyWindowClass(this);
myWindow->show();
}
this
オブジェクトの削除を管理するStackOverflowについて読みました。
親
mainWindow
が削除されると、ウィンドウは削除されます。
Windowsタスクマネージャを開いて、プログラムが使用しているRAMの量を確認すると、新しいダイアログウィンドウが開くたびに、使用されるメモリが増加します。
ここまでは順調ですね。ただし、(ではなくmainWindow
)ダイアログウィンドウを閉じると、使用されるRAMが減少します。これは、メモリがQtによって割り当て解除されることを意味します。
引用のように、親mainWindow
が削除されるとダイアログウィンドウが削除されることを期待しています。
私はそれを間違えましたか?
Qtには、親子関係と呼ばれる機能があり、「this」ポインターを使用して作成したオブジェクトが子であり、「this」ポインターが指すオブジェクトが親です。基本的には、親オブジェクトが削除されるたびに、オブジェクトが削除されることを示しています。したがって、親オブジェクトが削除された場合、オブジェクト化されたすべての子も削除されました。このメカニズムは、親が削除された場合にのみ、子オブジェクトが削除されることを保証します。ダイアログボックスを閉じたときにQtが子オブジェクトを削除すると思っていた場合は、間違っています。qtは親が削除された場合にのみメモリを解放するため、メモリが心配な場合はスマートポインタを使用することをお勧めします。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加