仅初始化函数的一部分一次

时间:2013-05-12 20:37:41

标签: c++ static initialization c++builder

我有一个小位的函数,我想初始化一次,例如。

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

如果多次调用此函数,则会留下一个无法优化的不必要的if (DoInit)。那么为什么我不像构造函数那样在其他地方进行初始化因为,逻辑上这个初始化代码最适合这个函数,并且更容易维护,尽管它每次都会进行不必要的检查。

有没有更好的方法可以在不使用上述示例中的构造的情况下执行此操作?

1 个答案:

答案 0 :(得分:2)

您可以通过构建一个在其构造函数中调用初始化代码的类来实现,如下所示:

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

现在你可以这样做:

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

该对象将被构造一次,恰好执行CallSomeInitCode一次。