- ベストアンサー
VC++:ダイアログがDispose()できない
- VC++の場合、C#のopenFileDialog1.Dispose();に相当するオブジェクト破棄のコードは不要なのでしょうか?
- 破棄が必要な場合、どのようなコードを書けばよいのでしょうか?
- VC++のダイアログでオブジェクトを破棄する方法を教えてください。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
近年 C++/CLI 触っていないのでうろ覚えですが、C++/CLI では openFileDialog1->Dispose() を呼び出すのに delete を使うんだったと記憶しています。 delete openFileDialog; gcnew との対称性を重んじたのでしょうね。ダイアログは unmanaged resource なので、CLR がよろしくやってくれるという事はありませんよ。openFileDialog が GC に回収されるまでリソースが残ってしまいます (まあ、それでも良いという態度もあるかも知れませんが、個人的には気持ち悪いです…)。 因みに、構文糖衣ですが ^ を付けずに (あたかも値型の様に) 宣言すると、C# の using と同等のコードを生成してくれます。つまり、自動的にスコープの終端で delete (Dispose) してくれます。 { OpenFileDialog openFileDialog1; openFileDialog1.Title = "ダイアログのタイトルをココに書く"; openFileDialog1.InitialDirectory = "c:\\"; openFileDialog1.FileName = "初期表示するファイル名をココに書く"; if (openFileDialog1.ShowDialog() == System::Windows::Forms::DialogResult::OK) MessageBox::Show(openFileDialog1.FileName); }
その他の回答 (1)
- Wr5
- ベストアンサー率53% (2173/4061)
CLIは触っていませんが……。 >VC++の場合 C#のopenFileDialog1.Dispose();に相当するオブジェクト破棄のコードは不要なのでしょうか? CLRがよろしく処理してくれる…ようです。 まぁ、即座に破棄したい場合はその限りではないようですが。
お礼
前略 ・ さっそく ご教示ありがとうございました。 しばらくするとCLRが処理してくれるようですが、delete openFileDialog1; で即座に終了処理することとしました。 今後ともよろしくお願いします 以上
お礼
前略 ・さっそくご教示ありがとうございます。 openFileDialog1->Dispose(); を delete openFileDialog1; に変更したらコンパイルできました。 ・糖衣構文については、まったくしりませんでした。コンパイルして実行を確認しました。勉強になりました。 今後ともよろしくお願いします。 以上