C#, C♯, C#相談室 Part88at TECHC#, C♯, C#相談室 Part88 - 暇つぶし2ch■コピペモード□スレを通常表示□オプションモード□このスレッドのURL■項目テキスト700:デフォルトの名無しさん 15/08/24 22:31:14.60 vU2SL/AS.net そのファイナライザ内だけで完結するんならそりゃそうだろ ・ 701:AとBが両方ともアンマネージリソースを抱えている ・AがBを参照している ・ネイティブライブラリの仕様でBはAより先に解放しなければならないと決まっている こういう状況では当然単純にAとBのファイナライザに頼るわけにはいかない Bにはファイナライザを実装しないでAのファイナライザ内でBのリソースを解放し、 その後にAのリソースを解放するといった工夫が必要になる 702:デフォルトの名無しさん 15/08/24 23:17:12.96 4CFfNfbx.net >>674 すまん、その通りだ。C#ではアンマネージドコードは禁止とは知らなかった。 解放しているのはunsafeで生ポインタだけか。 インラインアセンブラが出来るというのを見た覚えがあるのだが、気のせいだったようだ。 デストラクタも継承/オーバーロード禁止だから、>>671の言うとおり、staticにしか使えない。 C++からポーティングするなら、 デストラクタ内のは全部Disposeに移動し、そこで手動で親を呼んでおけばいい気がする。 これだとクラス内だけで留まる。 リソース解放タイミングを規定したいのなら手動でDisposeを呼ぶか、usingだね。 ただ、呼ばなくてもセグフォにはならないはず。 MSDNには > C++ 経験者が C# で開発する場合 > デストラクタ : C# は、アンマネージ リソースを確定的に解放する場合の構文が異なります。 > デストラクタ > using ステートメント (C# リファレンス) > https://msdn.microsoft.com/ja-jp/library/yyaad03b(v=VS.90).aspx だけだから、推奨はusingのようだ。 マネージドコードだけしか使えないのなら、本質的なリークはどうやっても発生しないように思える。 一時的なリソース枯渇はあり得るけど、例えばGDIなら描画しまくるアプリ(ゲーム等)でなければあまり気にしなくてもいいのでは。 次ページ最新レス表示レスジャンプ類似スレ一覧スレッドの検索話題のニュースおまかせリストオプションしおりを挟むスレッドに書込スレッドの一覧暇つぶし2ch