Weblio辞書辞典>コンピュータ>IT用語辞典>デストラクタ>デストラクタの2ページ目
デストラクタとは?
ただし、これらのプログラミング言語では仮想マシンとよばれる環境が自動的に空きメモリを確保する仕組みを持っているため、基本的にデストラクタを呼び出す必要はない。
ちなみに、デストラクタに対してオブジェクトを初期化するための関数はコンストラクタなどと呼ばれている。
参照リンク
⇒『C# および C++ のデストラクタ構文』 - (Microsoft)
(提供元:IT用語辞典バイナリ)
ページTOP▲
デストラクタ(消去子、destructor)は、オブジェクト指向プログラミング言語でオブジェクトを消去する際に呼び出されて後処理などを行なう関数、メソッドのこと。
特にC++では安全なリソース管理を実現するための重要な役割を担う。
なお、本項では類似概念であるファイナライザについても合わせて述べる。
デストラクタはオブジェクトの寿命が終了した直後に自動的に呼び出される。
具体的には自動変数ならばスコープを抜けた直後、静的オブジェクトならばプログラム終了直前、new演算子で生成したオブジェクトならばdelete演算子が適用された時である。
主にコンストラクタで確保したリソースを解放するための処理が記述される。
派生クラスの場合は、まず派生クラスのデストラクタが呼ばれて派生クラスによる追加部分が解体されてから、基底クラスのデストラクタが順次呼ばれることでオブジェクトが解体される。
基底クラスのポインタで派生クラスのインスタンスをポリモーフィックに利用する場合は、基底クラスのデストラクタを仮想関数にしなければならない(仮想デストラクタ)。
これはポインタが参照するインスタンスをdeleteする際に呼び出されるデストラクタがポインタの型で決定されるため、基底クラスのデストラクタが仮想でない場合は、基底クラスのデストラクタだけが呼ばれて派生クラスのデストラクタが呼ばれないためである。
基底クラスが仮想デストラクタを持っていれば、実際のインスタンスに応じて派生クラスのデストラクタが正しく呼び出される。
自動変数のデストラクタは、例外でスコープを脱出した際にも呼び出される。
そのため、コンストラクタでリソースを確保し、デストラクタでリソースを解放するクラスを自動変数として生成することで、スコープのどこから例外が投げられてもリソースの解放が確実に行われる。
このイディオムをRAIIという。
デストラクタは例外を投げるべきではない。
先に述べたようにデストラクタは例外伝播中にも呼ばれる可能性があるが、その時にデストラクタがさらに例外を投げると二重例外となり、プログラムの強制終了を招くからである。
デストラクタは、プログラマが定義しない場合にC++コンパイラが暗黙に生成する4つの関数の一つである。
楽に探せる!楽ワード
ページ(2/4)
≪前ページ
|
次ページ≫