3:コンとデスのタイミング
C++には、オブジェクトを作成したときに自動で実行される関数「コンストラクタ」と、破棄されるときに自動で実行される関数「デストラクタ」という概念があります。コンストラクタ関数はクラス名と同じ名前、デストラクタはクラス名と同じ名前の先頭にチルダ(~)文字を付け加えることで用意することができます。コンストラクタには引数をつけることができますが、コンストラクタ・デストラクタともに戻り値は存在しませんので、戻り値を用意してはいけません。class CHouse
{
public:
CHouse(); //コンストラクタ
~CHouse(); //デストラクタ
};
CHouse::CHouse()
{
//初期化処理
}
CHouse::~CHouse()
{
//後処理
}
次のプログラムを記述してコンパイル・実行するとコンストラクタ
- オブジェクトをnewで作成したとき
- ポインタ型ではないオブジェクトの宣言をしたとき
デストラクタ
- newで作成したオブジェクトをdeleteで破棄したとき
- ポインタ型ではないオブジェクトにおいて、プログラムが宣言された括弧から抜け出したとき
#include <stdio.h>
class CHouse
{
private:
int nID;
public:
CHouse(int ID); //コンストラクタ
~CHouse(); //デストラクタ
};
CHouse::CHouse(int ID)
{
nID = ID;
printf("%d のコンストラクタ実行\n", nID);
}
CHouse::~CHouse()
{
printf("%d のデストラクタ実行\n", nID);
}
void main()
{
CHouse house(0);
CHouse *ptr_house = new CHouse(1);
for(int i = 2; i <= 3; i++){
CHouse roop_house(i);
}
int j = 0;
if(j == 0){
CHouse house(4);
{
CHouse house(5);
}
}
delete ptr_house;
}
0 のコンストラクタ実行 1 のコンストラクタ実行 2 のコンストラクタ実行 2 のデストラクタ実行 3 のコンストラクタ実行 3 のデストラクタ実行 4 のコンストラクタ実行 5 のコンストラクタ実行 5 のデストラクタ実行 4 のデストラクタ実行 1 のデストラクタ実行 0 のデストラクタ実行
switch
文内で特定の場所にしか使用しない変数を使いたいときにしばしば用いられていますので、覚えておいて損はないでしょう。
switch(i){
case 0:
int j = 9; //これはエラーになる
printf("%d", j);
break;
case 1:
{
int k = 5; //これは実行可能
printf("%d", k);
}
break;
default:
break;
}