デストラクタとは?

Weblio|辞書<国語辞典・国語辞書・百科事典>

初めての方へ

参加元一覧


用語解説
Weblio 辞書コンピュータPHP用語デストラクタの解説 

PHP用語集

PHPプロ!PHPプロ!

デストラクタ

【英】 Destructor

オブジェクト指向言語作成したプログラムにおいて、特定オブジェクトへの全てリファレンス削除された直後や、オブジェクト明示的破棄された直後呼び出される特殊な関数

デストラクタはPHP5以上で利用可能で、__destructメソッドとして記述する。

関連用語

関連Webサイト



IT用語辞典バイナリ

IT用語辞典バイナリIT用語辞典バイナリ

デストラクタ

別名:解体子
【英】destructor

デストラクタとは、C++などのオブジェクト指向プログラミング言語において、あるオブジェクト破棄する際に呼び出す関数のことである。

プログラムは処理のためにメモリ領域などの資源一時的占有するので、処理が済んだ後はそれらの資源を自由に使用できるよう開放してやる必要がある。適切に開放が行なければ新し使用できる資源少なくなってメモリリークなどの異常を起こしてしまう。デストラクタを用いれば、プログラム内の任意オブジェクト終了し、資源空き領域確保することができる。デストラクタにがオブジェクト開放してやることで、そのオブジェクトのために確保していた資源開放し、他のオブジェクトアプリケーションなどに資源使用できるようになる。

JavaC#などの言語においては、ファイナライザ(finalizer)と呼ばれる関数がデストラクタに対応している。ただし、これらのプログラミング言語では仮想マシンよばれる環境自動的空きメモリ確保する仕組みを持っているため、基本的にデストラクタを呼び出す必要はない。

ちなみに、デストラクタに対してオブジェクト初期化するための関数コンストラクタなどと呼ばれている。


参照リンク
C# および C++ のデストラクタ構文 - (Microsoft
プログラミングのほかの用語一覧
オブジェクト指向:  COM  多重継承  単一継承  デストラクタ  UML
コーディング:  アキュムレーター  値渡し


ウィキペディア

ウィキペディアウィキペディア

デストラクタ

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2009/04/17 08:14 UTC 版)

デストラクタ(消去子、destructor)は、オブジェクト指向プログラミング言語でオブジェクトを消去する際に呼び出されて後処理などを行なう関数、メソッドのこと。特にC++では安全なリソース管理を実現するための重要な役割を担う。

なお、本項では類似概念であるファイナライザについても合わせて述べる。

C++

デストラクタはオブジェクトの寿命が終了した直後に自動的に呼び出される。具体的には自動変数ならばスコープを抜けた直後、静的オブジェクトならばプログラム終了直前、new演算子で生成したオブジェクトならばdelete演算子が適用された時である。主にコンストラクタで確保したリソースを解放するための処理が記述される。

派生クラスの場合は、まず派生クラスのデストラクタが呼ばれて派生クラスによる追加部分が解体されてから、基底クラスのデストラクタが順次呼ばれることでオブジェクトが解体される。基底クラスのポインタで派生クラスのインスタンスをポリモーフィックに利用する場合は、基底クラスのデストラクタを仮想関数にしなければならない(仮想デストラクタ)。これはポインタが参照するインスタンスをdeleteする際に呼び出されるデストラクタがポインタの型で決定されるため、基底クラスのデストラクタが仮想でない場合は、基底クラスのデストラクタだけが呼ばれて派生クラスのデストラクタが呼ばれないためである。基底クラスが仮想デストラクタを持っていれば、実際のインスタンスに応じて派生クラスのデストラクタが正しく呼び出される。

自動変数のデストラクタは、例外でスコープを脱出した際にも呼び出される。そのため、コンストラクタでリソースを確保し、デストラクタでリソースを解放するクラスを自動変数として生成することで、スコープのどこから例外が投げられてもリソースの解放が確実に行われる。このイディオムをRAIIという。

デストラクタは例外を投げるべきではない。先に述べたようにデストラクタは例外伝播中にも呼ばれる可能性があるが、その時にデストラクタがさらに例外を投げると二重例外となり、プログラムの強制終了を招くからである。

デストラクタは、プログラマが定義しない場合にC++コンパイラが暗黙に生成する4つの関数の一つである。暗黙のデストラクタの仕様は「中身が空」で「非仮想」となっている。

デストラクタの名前は、クラス名の前に~記号を付けたものと決められている。

ファイナライザ

ファイナライザ(finalizer)は、ガベージコレクタを持つ言語において不要オブジェクトが回収される前に自動的に呼び出されるメソッドである。

JavaRubyなどに存在する。C#にも存在するが、C#ではファイナライザに相当するものを「デストラクタ」と呼ぶので注意が必要である。C++/CLIにはデストラクタとファイナライザの両方が存在する。

デストラクタと違い、ファイナライザはオブジェクトが不要になってもすぐには呼ばれるとは限らない。不要になってから実際に回収されるまでの間に、いつか呼ばれるというだけである。それは不要になった直後かもしれないし、遙か後になるかもしれない。さらにはメモリに十分な余裕があれば、オブジェクトが回収されずファイナライザが永遠に呼ばれないということさえありうる。

このようにいつ呼び出されるかわからない、呼ばれるかどうかすらわからないメソッドのため、確実に実行されなければならないような処理は一般的にファイナライザに任せることはできない。したがって、「ファイナライザによるRAII」は誤りである。ファイナライザで行えることは極めて限定されており、「リソースを解放し忘れていないか確認し、解放し忘れていれば解放する」のようなフェールセーフ的な利用法がせいぜいである。もちろん、リソースは不要になった時点で適切に解放されているべきであって、ファイナライザのチェックは保険に過ぎない。解放し忘れは本来はバグで、ファイナライザに頼る設計をしてはいけない。

以上のような不確実性に加え、ファイナライザの利用はガベージコレクタの性能を低下させることもあり、積極的に利用されるものではない。業務サーバーのような、少々のバグがあっても動き続けていなければ困るようなアプリケーションでは用いられることもある。

関連項目

ウィクショナリー
ウィクショナリーデストラクタの項目があります。




固有名詞の分類



このページへのリンク
「デストラクタ」に関連した用語
デストラクタのお隣キーワード
Weblioモバイル
QRコード
URL:【http://m.weblio.jp/
ケータイでバーコードを読み取るか、URLを直接入力してアクセスして下さい。
» モバイルで「デストラクタ」を見る

_ _   


このページの著作権について
Weblio 辞書情報提供元は参加元一覧にて確認できます。

  
PHPプロ!PHPプロ!
©COPYRIGHT ASIAL CORPORATION ALL RIGHTS RESERVED.
IT用語辞典バイナリIT用語辞典バイナリ
Copyright © 2005-2010 Weblio 辞書 IT用語辞典バイナリさくいん。 この記事は、IT用語辞典バイナリデストラクタの記事を利用しております。
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのデストラクタ (改訂履歴)の記事を複製、再配布したのにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2010 Weblio RSS