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

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

変数の定義は可能な限り先延ばし

Effective C++ 第5章26項
コンストラクタやデストラクタを持つオブジェクトの変数を定義すると、生成や破棄するときにコストがかかる。なので、変数の定義は使われる直前で定義しようという話。
さらにループ内で使われる変数をループの外で定義するのが良いか、中で定義するのがよいかという話も。
外で定義してループ内で代入して使う場合のコード。

Test obj;
for(int i=0; i<n; ++i) {
    obj = iに依存する値;
    ...
}

中で定義する場合のコード。

for(int i=0; i<n; ++i) {
    Test obj(iに依存する値);
    ...
}

自分はループ外で定義したほうがコストが低いと思ったけど、そうとは限らない。「1回の代入」が「生成と破棄」よりもコストがかかってしまうような場合にはループ内で定義したほうが良い。
またスコープの範囲を狭くするのとコードの見やすさから考えると中で定義したほうが良い。
で、ふと思ったのだが、このあたりはコンパイラで最適化されたりするんだろうか。