• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VC++:ダイアログがDispose()できない)

VC++:ダイアログがDispose()できない

このQ&Aのポイント
  • VC++の場合、C#のopenFileDialog1.Dispose();に相当するオブジェクト破棄のコードは不要なのでしょうか?
  • 破棄が必要な場合、どのようなコードを書けばよいのでしょうか?
  • VC++のダイアログでオブジェクトを破棄する方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.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); }

stokyostokyo3
質問者

お礼

前略 ・さっそくご教示ありがとうございます。  openFileDialog1->Dispose(); を delete openFileDialog1; に変更したらコンパイルできました。 ・糖衣構文については、まったくしりませんでした。コンパイルして実行を確認しました。勉強になりました。 今後ともよろしくお願いします。 以上

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2173/4061)
回答No.1

CLIは触っていませんが……。 >VC++の場合 C#のopenFileDialog1.Dispose();に相当するオブジェクト破棄のコードは不要なのでしょうか? CLRがよろしく処理してくれる…ようです。 まぁ、即座に破棄したい場合はその限りではないようですが。

参考URL:
http://fireball.loafer.jp/kes/article_558.html
stokyostokyo3
質問者

お礼

前略 ・ さっそく ご教示ありがとうございました。   しばらくするとCLRが処理してくれるようですが、delete openFileDialog1; で即座に終了処理することとしました。  今後ともよろしくお願いします 以上