[csharpll:0330] Re: <教> リソース解放のタイミング

Subject:
[csharpll:0330] Re: <教> リソース解放のタイミング
From:
FUKUDA, Fumiki <fukuda.fm@...>
Date:
Wed, 22 Mar 2006 10:44:06 +0900
X-Mailer:
Microsoft Outlook Express 6.00.2800.1506
Message-Id:
<0a8801c64d52$1dff5e90$e5d2060a‐at‐stf.ncos.nec.co.jp>
References:
329
επιστημηです。

まとめてみる。間違いあったら突っ込んでおくんなさい。

- C++
 auto: スコープから外れたらデストラクタ X::~X() が'必ず'動く。
 heap: 明示的にdeleteされたらX::~X() が'必ず'動く

- C++/CLI(managed)
 auto: スコープから外れたらデストラクタ X::~X() が'必ず'動く。
 heap: GC直前にデストラクタX::~X()が動く。が、GCされずに終了する
 こともアリ。そんときゃファイナライザX::!X()が(あれば)動く。
 なのでデストラクタX::~X()はその中でファイナライザX::!X()を呼び、
 デストラクタ/ファイナライザは'何度呼ばれてもコケないように'
 実装すべし。

- C#
 auto: なにそれ? おいしいの?
 heap: 確実に動く(C++でいう)デストラクタはない。
 X::~X()は実はファイナライザ。確実に後始末を行いたければ、
 プログラマが明示的に後始末メソッドを呼び出す(finally節で呼ぶが吉)。
 もしくはIDisposableを実装し(void Dispose() 内で後始末を行い)、
 usingでくるんでおく。ただし、Disposeが呼ばれてもインスタンス
 (つかメモリ領域)はGCまで居座ってる。 

スレッド

Navigation

検索

[検索ヘルプ]

Maintener: Tietew <www.tietew.jp>
Powered by Ruby on Rails, Mongrel, PostgreSQL, and Hyper Estraier.
click here