初始化的功能部件只有一次(Initializing part of function only on

2019-09-02 19:08发布

我有一个小一点的功能,我想初始化一次如

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

如果这个函数被调用很多时候离开一个不必要的if (DoInit)不能被优化。 那么,为什么不我不初始化其他地方类似的构造? 因为,这在逻辑上初始化代码最好在这个函数内符合并,更容易保持这种方式尽管它每次会做不必要的检查。

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

Answer 1:

您可以通过构建调用初始化代码在其构造,像这样一类做到这一点:

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

现在,你可以这样做:

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

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



文章来源: Initializing part of function only once