これまでのところ、私のアプリケーションでは、実行時に作成された追加のフォームはすべてモーダルにする必要があることがわかりました。したがって、新しいフォームを作成するときは、次のコード ブロックに似たものを使用します。
void __fastcall ShowForm( TComponent * Owner )
{
TForm1 * form = new TForm1( Owner );
form->ShowModal();
delete form;
}
このアプローチでは、ユーザーがフォームを閉じた後、フォームのメモリは簡単に削除されます。
ただし、非モーダル ダイアログのメモリ管理を処理する方法を理解しようとすると、問題が発生します。明らかに、ShowForm
フォームは作成直後に削除されるため、メソッドの最後で単純に delete を呼び出すことはできません。だから私はこのようなものを残しています:
void __fastcall ShowForm( TComponent * Owner )
{
TForm1 * form = new TForm1( Owner );
form->Show();
}
このドキュメントと私が作成したテスト アプリケーションに基づいて、所有者が閉じられるとポインターが削除されることがわかりましform
た。ただし、それでも次のシナリオが残ります。
上記の方法と同じように、コードを使用FormA
するインスタンスを作成して表示するボタンがあるとします。FormB
ボタンをクリックして を作成し、を3 回FormB
閉じます。が閉じられるFormB
まで、 の 3 つのインスタンスがメモリに残ります。 FormA
FormB
フォームが閉じられるとフォームに割り当てられたメモリが削除されるように、フォーム作成用のメモリを管理するにはどうすればよいですか? これには標準的なベスト プラクティスがありますか、それとも組み込みの機能が不足していますか?