ゲームが作れるようになるまでがんばる日記

ゲーム制作のことを中心にゲームに関することを書いています

オブジェクトは使う前に初期化する

Effective C++ 第1章4項
オブジェクトは使う前に初期化すること。

class Test {
private:
    string m_Text;
public:
    Test()
    {
        m_Text = "this is test";
    }
};

このプログラムではTestクラスのコンストラクタ内でメンバ変数のstringを初期化しているように見える。使う前に初期化するという意味では正しいけど、実際にはstringのデフォルトコンストラクタで初期化されたあとに代入されている。
この場合、メンバ初期化子リストを使うほうがよい。

class Test {
private:
    string m_Text;
public:
    Test()
    : m_Text("this is test")
    {
    }
};

これならばstringのデフォルトコンストラクタが呼ばれなくなるので効率もよい。
初期化のし忘れでバグを出してしまわないように、クラスのメンバはコンストラクタで初期化してしまう癖を付けるようにしたい。