コンストラクタとデストラクタ
classにはコンストラクタとデストラクタというメソッド(関数)が用意されています。
基本でありながら使いこなすとかなり便利な機能です。
コンストラクタ
コンストラクタとはclassが生成されたタイミングで呼び出される関数です。
ここで初期化の処理を記載することで生成されている時にメンバ変数等が初期化されていることを保証できます。
例えばポインターにNULLを設定しておけば不定なアドレスへのアクセスを抑制できます。
デストラクタ
デストラクタとはclassが破棄されたタイミングで呼び出される関数です。
ここで終了処理やメモリの解放などを行うことで解放漏れを防ぐことができます。
これらは汎用性が高く使い勝手がいいので、クラスを定義する場合は高い確率で使用されています。
コンストラクタとデストラクタの実装
C++では戻り値の無いclass名と同名の関数を定義するとコンストラクタと認識されます。
class名の前に~を付けるとデストラクタとして認識されます。
実際にプログラムにすると下記のようになります。
class Vector { public: Vector(void) : x(0.0f), y(0.0f), z(0.0f) {} ~Vector(void) {} float x, y, z; }; void ClassTest(void) { Vector vec; printf("x:%f, y:%f, z:%f\n", vec.x, vec.y, vec.z); }
これでClassTest関数を呼び出すとhogeが生成されてコンストラクタが呼び出されます。
関数を出るとhogeが解放されるのでデストラクタが呼び出されます。
値が不定な値にならないという事は不具合の対策にもなるので、classを使うときは基本的にコンストラクタで初期化するようにしましょう。