只初始化部分函数一次

Initializing part of function only once

本文关键字:一次 初始化部 函数      更新时间:2023-10-16

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

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

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

有没有更好的方法来做到这一点,而不诉诸于使用上面的例子中的结构?

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

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

现在你可以这样做:

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

对象只构造一次,只执行一次CallSomeInitCode