クラスのメンバ関数には、特殊なモノが存在します。
コンストラクタとデストラクタです。
ここではデストラクタについて説明します。
(コンストラクタについてはコチラ。)
コンストラクタは、クラスのインスタンス作成時に
自動的に呼ばれる特殊なメンバ関数でしたが、
デストラクタは、
そのインスタンスが破棄される直前に自動的に
呼ばれる特殊なメンバ関数です。
故意に呼ぶ事もできますが、推奨しません。
デストラクタで行う処理はあまり多くはありませんが、
あるとすれば、クラス内で確保した動的なメモリを解放する処理くらいです。
デストラクタの名前は、
クラス名の前に~(チルダ)を付けたモノになります。
クラス名がhitoならば、デストラクタ名は、~hitoになります。
引数や戻り値は設定できません。(void記述も不要。)
デストラクタ利用例
ファイル名:keisan.h
class keisan {
public:
int *ip;
keisan(); // コンストラクタ
~keisan(); // デストラクタ
int *tasizan(int x, int y);
};
ファイル名:keisan.cpp
#include "keisan.h"
keisan::keisan() {
ip = new int;
}
keisan::~keisan() {
delete ip;
}
int *tasizan(int x, int y) {
*ip = x + y;
return ip;
}
ファイル名:main.cpp
#include <iostream>
#include "keisan.h"
using namespace std;
void main(void) {
keisan obj;
int *ans;
ans = obj.tasizan(10, 5);
cout << "10+5=" << *ans << "です" << '\n';
}
この例では、クラスkeisanのメンバ関数tasizanで足し算の結果を求め、
coutで表示するプログラムです。
(実際にはあまり意味のないプログラムです。)
まず、コンストラクタでは、
動的にint型のメモリ領域を確保しています。
この領域は、足し算の結果を格納するための領域として使っています。
そして、メンバ関数tasizanでは、
足し算結果を動的に確保したメモリ領域にセットし、
その領域のポインタが返され、coutで表示しています。
デストラクタは、そ
のインスタンスがもうプログラム上で使われないと判断されれば、
呼び出されます。
このプログラムでは、main関数を抜けると
クラスkeisanのインスタンスobjが使用できなくなるので、
その時点で呼ばれる事になります。
デストラクタの動作を確認したい場合は、
デストラクタ内に、coutなどで
コンソール上に出力するコードを書き加えるとよく分かります。