2

私は一度初期化したい小さなビットを持つ関数を持っています。

void SomeFunc()
{
static bool DoInit = true;
if (DoInit)
   {
   CallSomeInitCode();
   DoInit = false;
   }
// The rest of the function code
}

この関数が何度も呼び出されると、if (DoInit)最適化できない不要な関数が 1 つ残ります。では、コンストラクターなどの他の場所で初期化を行わないのはなぜですか? 論理的には、この初期化コードはこの関数内に最適であり、毎回不必要なチェックを行うにもかかわらず、そのように維持する方が簡単だからです。

上記の例の構成を使用せずにこれを行うより良い方法はありますか?

4

1 に答える 1

2

次のように、コンストラクターで初期化コードを呼び出すクラスを構築することで、これを行うことができます。

class InitSomething {
public:
    InitSomething() {
        CallSomeInitCode();
    }
};

今、あなたはこれを行うことができます:

void SomeFunc() {
    static InitSomething myInitSomething;
    ...
}

オブジェクトは一度構築され、CallSomeInitCode正確に 1 回実行されます。

于 2013-05-12T20:43:56.787 に答える