コンストラクタでは、代入よりも初期化を使おう 12項

これよりも

Hoge::Hoge(const string& initName)
{
    this->name = initName;
}

これを使いましょうという話。

Hoge::Hoge(const string& initName) : name(initName)
{
}


理由は、初期化リストではstringのコピーコンストラクタのみが実行されるのに対して、コンストラクタでの代入では、コンストラクタ・代入が行われて効率が良くないから。


またメンバの name がもし仮に const であるならば(これは良くあることだが)、そもそも初期化リストでしか初期化できない。


代入を使うほうが理にかなっているというシチュエーションもあり、(大量組み込み型データメンバーの場合)、その詳細は、Effective C++ 【改訂第2版】 アスキーアジソンウェスレイシリーズ―Ascii Addison Wesley programming seriesをご覧ください。


初期化リストは結構忘れがちなので肝に銘じます。