コンストラクタとデストラクタ

提供: C++入門
2013年3月23日 (土) 22:09時点におけるDaemon (トーク | 投稿記録)による版

移動: 案内検索
スポンサーリンク


概要

クラス は、コンストラクタデストラクタと呼ばれるメンバを持ちます。 クラスをインスタンス化するときにコンストラクタが呼び出されます。 インスタンスが解放されたり、スコープ外になったときに、デストラクタが呼び出されます。

コンストラクタの役割は、インスタンスの初期化です。メンバ変数の初期化処理などを請け負います。

デストラクタの役割は、インスタンスの終了処理です。メモリの解放やファイルのクローズなどをやってもらうことができます。

クラスにおけるコンストラクタ

クラスのコンストラクタは、クラス名と同じ名前を持ちます。

class C {
	public:
		// コンストラクタ
		C() {
		}
};

オーバーロードのために複数のコンストラクタを持つことができます。

class C {
	public:
		int m_i;
		// コンストラクタ
		C() {
		}
		C(int i): m_i(i) {
		}
};

クラスのデストラクタは、クラス名の前にチルダ(~)をつけた名前を持ちます。

クラスにおけるデストラクタ

class C {
	public:
		// デストラクタ
		~C() {
		}
};

コンストラクタとデストラクタの省略

コンストラクタとデストラクタは、不要であれば、省略できます。

class C {
	public:
		void foo() {
		}
};

コンストラクタとデストラクタの例

ソースコード class_scope.cpp

#include <iostream>
using namespace std;
class Foo {
        public:
                Foo() { cout << __PRETTY_FUNCTION__ << endl;}
                ~Foo() { cout << __PRETTY_FUNCTION__ << endl;}
                void doit() { cout << __PRETTY_FUNCTION__ << endl;}
};
 
int main(int argc, char const* argv[])
{
 
        Foo f;
        f.doit();
 
        return 0;
}

コンパイル

g++  class_scope.cpp -o class_scope

実行例

メイン関数が呼び出されると Foo のインスタンスが作成されます。 インスタンスが作成されたときに、コンストラクタが呼び出されます。 メイン関数のスコープが終わるときにFooのインスタンスのデストラクタが呼び出されます。

% ./class_scope
Foo::Foo()
void Foo::doit()
Foo::~Foo()

関連項目




スポンサーリンク