简单地说,我有一个带有 Foo() 构造函数的 Foo 类。
另一个 Bar 类包含 Foo 类的静态成员:Foo 成员正在初始化(但未构造)。
构造静态成员的最佳方法是什么,换句话说,我应该在哪里以及如何确保在静态成员上调用构造函数?
我应该转向单身吗?
// In demo.h
class Foo {
Foo() {
// doing important stuff in there
}
};
class Bar {
static Foo foo;
};
// In demo.cpp
Foo Bar :: foo = Foo();
void main() {
Bar bar;
// bar.foo is not constructed yet. How to do that?
}
与您似乎相信的相反,您现在所做的应该正确调用
Foo
的 ctor。
不过,你做的比真正需要的多了一点。你可以减少这个:
Foo Bar :: foo = Foo();
致:
Foo Bar::foo;
与之前一样,您(理论上)默认构造一个临时对象,然后从该临时对象复制构造
Bar::foo
。我不认为这有什么意义(尽管一个理智的编译器通常不会这样做——它只是默认直接构造对象,所以你的额外代码只是增加了视觉噪音)。