C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: C++/CLIでのリソースの解放について


(過去ログ 25 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■11566 / inTopicNo.1)  C++/CLIでのリソースの解放について
  
□投稿者/ tommy (1回)-(2007/12/18(Tue) 02:32:09)

分類:[C++/CLI] 

環境
OS:WinXP SP2
デバッガ:VidualStudio.Net 2005 StandardEdition

始めまして。
今現在C++/CLIの環境でフォームのオープンを
 
if(hForm == nullptr || hForm->IsDisposed)
{
hForm = gcnew myForm();
hForm->Show();
}

このように実装しています。
フォームを閉じるときにしっかりデストラクタを通ってたのにIsDisposedが参照できるので
MSDNを覗いたところ、
 
>このプロパティが true を返す場合は、コントロールが破棄されており、
>有効な Windows コントロールとして参照できません。コントロールのインスタンスは破棄されても、
>ガベージ コレクションによってメモリから削除されるまでは、メモリ内に保持されます。
>コントロールが破棄されると、その RecreateHandle メソッドを呼び出すことはできません。

このようにありました。
これは参照はガベージコレクションが起きるまでが有効なので、上のコードは基本的には通常の動作をしながら
いきなりIsDisposedの参照部分で実行時エラーを起こしてしまう可能性があるということなのでしょうか?
 
誰か分かる人がいたら教えてください。よろしくお願いします。
引用返信 編集キー/
■11568 / inTopicNo.2)  Re[1]: C++/CLIでのリソースの解放について
□投稿者/ Hongliang (218回)-(2007/12/18(Tue) 07:22:43)
Hongliang さんの Web サイト
> これは参照はガベージコレクションが起きるまでが有効なので、上のコードは基本的には通常の動作をしながら
> いきなりIsDisposedの参照部分で実行時エラーを起こしてしまう可能性があるということなのでしょうか?

GC が発生するまで参照が有効なのではなく、参照が残っている間は GC によって回収されません。
hForm が Form インスタンスを参照している限り hForm は GC の対象になりません。
hForm に別のインスタンスを代入することで、それまで参照していたインスタンスは(他に参照されていなければ)GC の対象になります。
また、デストラクタはインスタンスを破棄するものではありません。
引用返信 編集キー/
■11569 / inTopicNo.3)  Re[1]: C++/CLIでのリソースの解放について
□投稿者/ Jitta on the way (60回)-(2007/12/18(Tue) 07:29:00)
No11566 (tommy さん) に返信
> いきなりIsDisposedの参照部分で実行時エラーを起こしてしまう可能性があるということなのでしょうか?

この部分、よくわかりませんでした。
コントロールのハンドルにさわらなければ、大丈夫ですよ?
それとも、他のなにかを心配されていますか?
引用返信 編集キー/
■11757 / inTopicNo.4)  Re[2]: C++/CLIでのリソースの解放について
□投稿者/ tommy (2回)-(2007/12/21(Fri) 01:43:06)
>>GC が発生するまで参照が有効なのではなく、参照が残っている間は GC によって回収されません。
>>hForm が Form インスタンスを参照している限り hForm は GC の対象になりません。
>>hForm に別のインスタンスを代入することで、それまで参照していたインスタンスは(他に参照されていなければ)GC の対象になります。
>>また、デストラクタはインスタンスを破棄するものではありません。

返事遅くなってすみません。
色々納得が行きました。参照している変数が消えない限りインスタンスは消えないということですね。
これで安心して作業できます。ありがとうございました。
 

>>この部分、よくわかりませんでした。
>>コントロールのハンドルにさわらなければ、大丈夫ですよ?
>>それとも、他のなにかを心配されていますか?

デストラクタが起きたらすぐインスタンスが破棄され不正な参照になり実行時エラーになるかと思っていました。
紛らわしい書きかた申し訳ありません。


解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -