デストラクタ

読み:デストラクタ
外語:destructor
品詞:名詞

オブジェクト指向言語において、あるオブジェクトが解放(破棄)される際に実行される処理やメンバ関数のこと。ディストラクタとも。

デストラクタは、そのオブジェクトが解放される時に呼び出される関数である。

そのオブジェクトの有効範囲が終わったり、プログラム自体が終了した際に、呼び出されることになる。

この機能は、C++等に存在するが、Javaにはない。Javaは、代わりにファイナライザというものがあるが、目的とするものは基本的に同様である。

基本

デストラクタ内で行なう処理は任意だが、経験則により、解決困難なバグの混入を防ぐためクラス外に影響を及ぼすような処理(グローバル変数へのアクセスなど)は避けるべきだとされている。

一般的にはコンストラクタで確保したメモリの解放確保や初期化など、そのクラスを利用するために実行したことの整理、後始末をするのに用いられる。

デストラクタは、必要がなければ作る必要はない。その場合でも、コンパイラが自動的に適切な処理をするが、そこでコンパイラが何をしているかをプログラマが意識する必要はない。

C++

C++では、デストラクタの関数名は、クラス名の頭に~を付けたものとする。例えばクラス名がCTestであるなら、classの定義にて~CTest();などを宣言し、CTest::~CTest()として処理を記述することになる。

C++において特に重要なことは、デストラクタ内で不用意に例外を起こしてはならない事が挙げられる。資源の開放忘れやメモリリークを引き起こし、結果として解決困難なバグに悩まされることになる。

例外が起きそうな箇所には必ずtry〜catchで蓋をして、そこから外に例外が飛び出さないように気をつける必要がある。