コンテンツにスキップ

デストラクタ

出典: フリー百科事典『ウィキペディア(Wikipedia)』

: destructorC++DelphiRust

[1]使


C++

[編集]

寿newdelete

delete

RAII (Resource Acquisition Is Initialization) 



C++

~

mainMyClassobj~MyClass()
#include <iostream>

class MyClass {
public:
    // デフォルトコンストラクタ。
    MyClass() { std::cout << "MyClass() is called." << std::endl; }
    // デストラクタ。
    ~MyClass() { std::cout << "~MyClass() is called." << std::endl; }
};

int main() {
    std::cout << "main() function started." << std::endl;
    MyClass obj; // 関数ブロックを抜けると破棄される。
    std::cout << "main() function finished." << std::endl;
}

例えばnew演算子で動的に生成した別のオブジェクト(動的に確保したメモリ領域)へのポインタや、オープンしたファイルのハンドルなどをクラスのメンバー変数として保持しておき、delete演算子による削除(メモリ領域の解放)やファイルのクローズといった後始末用の処理をデストラクタに記述することで、クラスオブジェクトの寿命が尽きたときに後始末を確実に自動実行させることができる。

ファイナライザ

[編集]

 (finalizer) 

JavaRubyC++/CLIC#C++[2][3]

.NET Framework

RAII[4]

[5]

Java 9[6]

他言語の類似機能

[編集]

RAIIJavaAutoCloseabletry-with-resourcesC#System.IDisposableusingC++/CLIIDisposable[7]

Objective-Cdealloc[8]Objective-CSwiftdeinit[9]

脚注

[編集]

関連項目

[編集]