初始化的功能部件只有一次

问题描述:

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

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

如果这个函数被调用很多时候离开一个不必要if (DoInit)不能优化。那么为什么我不像构造函数那样进行初始化呢?因为,从逻辑上讲,这个初始化代码最适合这个函数,并且这样更容易维护,尽管它每次都会进行不必要的检查。

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

+3

好像你想要一个类,而不是一个函数。 – 2013-05-12 20:40:09

+0

这个函数已经是另一个类的一部分了,是的,我可以使用类或结构,但是由于某些成员的作用域可能会变得更加混乱。我同意它可以替代这个。任何其他想法? – Coder12345 2013-05-12 20:41:26

+0

为什么不能优化? – 2013-05-12 20:42:50

您可以通过建立在它的构造函数调用初始化代码的类,这样做:

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

现在你可以这样做:

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

对象将构建一次,正好执行CallSomeInitCode一次。

+0

当然,由该实际产生的代码可能是,上面给出更多或更少的相同,因为编译器将一个“if myInitSomething尚未设置呼叫构造函数”一段代码。如果“SomeFunc”在紧密循环中被称为gazillion次,它仍然会添加额外的代码 - 在这种情况下,单独初始化和“在调试模式下检查它是否初始化”会更有意义。 – 2013-05-12 20:49:24