C++のデストラクタ(Destructor)とは?役割と使い方をやさしく解説!
C++のクラスには、オブジェクトの生成時に呼ばれる「コンストラクタ」がある一方で、オブジェクトの寿命が終わるときに呼ばれる「デストラクタ(Destructor)」という機能も存在します。
この記事では、C++のデストラクタの基本的な役割や使い方、注意点について初心者にもわかりやすく解説します。
デストラクタとは?
デストラクタとは、オブジェクトが破棄されるときに自動的に呼び出される特殊な関数です。
主に、動的に確保したメモリやファイル、リソースの解放処理などを行うために使用されます。
コンストラクタが「始まりの処理」なら、デストラクタは「終わりの処理」を担当します。
基本構文
class クラス名 {
public:
~クラス名(); // デストラクタの宣言
};
- デストラクタはクラス名の前にチルダ(~)を付けた名前になります。
- コンストラクタと同様、戻り値は書きません(voidも不要)。
- 引数を取ることはできません。
デストラクタの例
#include <iostream>
using namespace std;
class Car {
private:
string name;
public:
// コンストラクタ
Car(string carName) {
name = carName;
cout << name << " を初期化しました。" << endl;
}
// デストラクタ
~Car() {
cout << name << " を終了処理しました。" << endl;
}
};
int main() {
Car myCar("スバル");
// ここで何か処理
return 0;
}
このプログラムでは、main()
の終了時にmyCar
が破棄されるため、デストラクタが自動で呼ばれます。
デストラクタの主な用途
- newで確保したメモリの解放(delete)
- 開いたファイルのクローズ
- ネットワークリソースやウィンドウの破棄
注意点
- デストラクタは複数定義できません(オーバーロード不可)
- 呼び出しは自動で行われますが、ポインタを使う場合はdelete
を忘れずに!
スマートポインタとの関係
C++11以降では、スマートポインタ(std::unique_ptrやstd::shared_ptr)を使うことで、デストラクタによるリソース解放を自動化できます。
生のポインタを使うより安全で便利なので、併せて覚えておくと良いでしょう。
まとめ
C++のデストラクタは、オブジェクトの後始末(終了処理)を自動で行ってくれる大切な機能です。
特に動的メモリやファイル処理を扱う場面では欠かせない存在です。
安全で効率的なプログラミングのために、コンストラクタとセットでデストラクタの仕組みをしっかり理解しておきましょう!