質問: new ModelessDlg(this); dlg->Create(IDD_MODELESSDLG, this); dlg->ShowWindow(SW_SHOW); delete dlg; //ここでサブダイアログが消えてしまう。かといってdeleteしない?のはダメでしょ^^; } ``` かと言って、コンストラクタでnewしておいて、デストラクタでdeleteするとしたら、複数のサブダイアログが開かれたときにメモリが足りなくなるのでは・・・ (まぁいまのコンピュータからすれば幾多のダイアログ開かないとメモリが飛ぶことはないのでしょうが) この場合、どこでdeleteすればいいのかわからないのでご教授いただけないでしょうか。
回答: モードレスダイアログをどういう風に使いたいかによりますが、deleteし忘れないようにするためには、ご質問にもありますように > > コンストラクタでnewしておいて、デストラクタでdeleteする > > > でいいと思います。実際には、ダイアログを管理するクラス(今回だとメインダイアログ)のメンバとしてモードレスダイアログのポインタを持っておき、モードレスダイアログを開くタイミングで`new`して、管理クラスのデストラクタでポインタが`NULL`じゃなかったら`delete`する、というようなことをよくやります。 > > 複数のサブダイアログが開かれたときにメモリが足りなくなるのでは・・・ > > (まぁいまのコンピュータからすれば幾多のダイアログ開かないとメモリが飛ぶことはないのでしょうが) > > > Windows95とか98の時代ならともかく、常識的な範囲で複数サブダイアログを開いたくらいではメモリ不足になることはまずないと思います。