コンストラクタが、オブジェクト生成時に初期化処理をするメンバ関数ならば、
デストラクタは、オブジェクト破棄時に終了処理をするメンバ関数・・・。
デストラクタは、戻り値なしで、頭にチルダ('~')をつけて、
class <クラス名>{
<アクセス指定子>:
~<クラス名>();
};
と宣言し、
<クラス名>::~<クラス名>(){ }
と定義する・・・。
デストラクタの場合は引数もつけない・・・。
デストラクタを使う場合は、コンストラクタと対の処理を行う場合が多い・・・。
クラス、コンストラクタの頁で作成したclass_profileの各メンバ変数の一部(name, address)を動的配列にし、コンストラクタにてnew演算子で生成、デストラクタにてdelete演算子で破棄するようにしてみよう・・・。
まずは、クラスの定義・・・。
メンバ変数は・・・、
配列だったのをポインタに・・・。
コンストラクタとデストラクタは、
こんな感じ・・・。
コンストラクタの定義では、
コンストラクタが開始されたことを明示しつつ、newでname, addressを生成・・・。
デストラクタの定義は、
デストラクタ開始と明示し、name, addressをdeleteで破棄・・・。
main関数は、
と何も変わらない・・・。
実行すると、コンストラクタは、
のときに、実行される・・・。
$ ./destructor ----- constructor ----- name:
入力して、
$ ./destructor ----- constructor ----- name: Taro age: 20 address: Tokyo
出力・・・。
$ ./destructor ----- constructor ----- name: Taro age: 20 address: Tokyo name: Taro age: 20 address: Tokyo
このあと、プログラムを終了となる、
のあとにオブジェクトがスコープを抜けて破棄されるので、デストラクタが実行される・・・。
$ ./destructor ----- constructor ----- name: Taro age: 20 address: Tokyo name: Taro age: 20 address: Tokyo ----- destructor ----- $
デストラクタも実行されたみたい・・・。
Sample/destructor.cpp at master · bg1bgst333/Sample · GitHub