2

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

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

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

有没有更好的方法来做到这一点而无需使用上面示例中的构造?

4

1 回答 1

2

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

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

现在你可以这样做:

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

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

于 2013-05-12T20:43:56.787 回答