デストラクタ
(ファイナライザ から転送)
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/01/07 17:57 UTC 版)
デストラクタ(英: destructor)は、オブジェクト指向プログラミング言語でオブジェクト(インスタンス)を削除する際に呼び出されて後処理などを行なう関数あるいはメソッドのこと。C++やDelphi、Rustにおいてサポートされている。デストラクタは確実かつ安全なリソース管理を実現するための重要な役割を担う。
- ^ デストラクタ(解体子)とは - IT用語辞典 e-Words
- ^ Destructors (C# Programming Guide) | Microsoft Docs
- ^ Finalizers (C# Programming Guide) | Microsoft Docs
- ^ ヒント: ファイナライザーによる脆弱性からコードを保護する | IBM, Internet Archive
- ^ ファイナライザを理解する ~ファイナライザに起因するトラブルを避けるために~ | 富士通 | 橋口 雅史
- ^ Object (Java SE 9 & JDK 9 )
- ^ How to: Define and consume classes and structs (C++/CLI) | Microsoft Learn
- ^ dealloc | Apple Developer Documentation
- ^ Deinitialization | Documentation
- 1 デストラクタとは
- 2 デストラクタの概要
- 3 他言語の類似機能
ファイナライザ
出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2020/06/28 21:23 UTC 版)
ファイナライザ (finalizer) は、ガベージコレクタを持つ言語において不要オブジェクトが回収される前に自動的に呼び出されるメソッドである。 Java、Rubyなどに存在する。C++/CLIにはデストラクタとファイナライザの両方が存在する。C#にはファイナライザのみが存在するが、構文がC++のデストラクタに酷似しており、かつては「デストラクタ」と呼ばれていた。 デストラクタと違い、ファイナライザはオブジェクトが不要になってもすぐには呼ばれるとは限らない。不要になってから実際に回収されるまでの間に、いつか呼ばれるというだけである。それは不要になった直後かもしれないし、遙か後になるかもしれない。さらにはメモリに十分な余裕があれば、オブジェクトが回収されずファイナライザが永遠に呼ばれないということさえありうる。 このようにいつ呼び出されるかわからない、呼ばれるかどうかすらわからないメソッドのため、確実に実行されなければならないような処理は一般的にファイナライザに任せることはできない。したがって、「ファイナライザによるRAII」は誤りである。ファイナライザで行えることは極めて限定されており、「リソースを解放し忘れていないか確認し、解放し忘れていれば解放する」のようなフェイルセーフ的な利用法がせいぜいである。リソースは不要になった時点で適切に解放されているべきであり、ファイナライザのチェックは保険に過ぎない。解放し忘れは本来はバグで、ファイナライザに頼る設計をしてはいけない。ファイナライザを誤って実装すると、脆弱性が生じることもある。 以上のような不確実性に加え、ファイナライザの利用はガベージコレクタの性能を低下させることもあり、積極的に利用されるものではない。業務サーバーのような、少々のバグがあっても動き続けていなければ困るようなアプリケーションでは用いられることもある。 Java 9ではファイナライザが非推奨となった。
※この「ファイナライザ」の解説は、「デストラクタ」の解説の一部です。
「ファイナライザ」を含む「デストラクタ」の記事については、「デストラクタ」の概要を参照ください。
- ファイナライザのページへのリンク