初始化的功能部件只有一次
问题描述:
我有一个小一点的功能,我想初始化一次例如初始化的功能部件只有一次
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
一次。
+0
当然,由该实际产生的代码可能是,上面给出更多或更少的相同,因为编译器将一个“if myInitSomething尚未设置呼叫构造函数”一段代码。如果“SomeFunc”在紧密循环中被称为gazillion次,它仍然会添加额外的代码 - 在这种情况下,单独初始化和“在调试模式下检查它是否初始化”会更有意义。 – 2013-05-12 20:49:24
好像你想要一个类,而不是一个函数。 – 2013-05-12 20:40:09
这个函数已经是另一个类的一部分了,是的,我可以使用类或结构,但是由于某些成员的作用域可能会变得更加混乱。我同意它可以替代这个。任何其他想法? – Coder12345 2013-05-12 20:41:26
为什么不能优化? – 2013-05-12 20:42:50