Vit*_*lii 4 c++ windows class visual-c++
它在C#中是微不足道的,但在C++(native,Win32,Visual C++)中我没有看到解决方案.所以,我有MyClass1类和非平凡的构造函数,而在MyClass2中我想拥有MyClass1类型的静态成员:
MyClass1.h:
class MyClass1
{
public MyClass1(type1 arg1, type2 arg2);
}
Run Code Online (Sandbox Code Playgroud)
MyClass2.h:
class MyClass2
{
public:
static MyClass1 Field1;
}
Run Code Online (Sandbox Code Playgroud)
和MyClass2.cpp:
MyClass1 MyClass2::Field1(arg1, arg2);
Run Code Online (Sandbox Code Playgroud)
我希望这样的代码将初始化MyClass2 :: Field并在初始化期间调用MyClass1构造函数.但是,看起来编译器只为Class1分配内存,而且从不调用构造函数,就像我这样做:
MyClass1 MyClass2::Field1 = *(MyClass1 *)malloc(sizeof(MyClass1));
Run Code Online (Sandbox Code Playgroud)
在C++中是否有任何"官方"方式来初始化具有非平凡构造函数的静态类成员?
您可能会遇到静态初始化订单Fiasco.类或命名空间范围的静态变量在main()执行之前被初始化,但初始化的顺序取决于链接时间因素.
要解决这个问题,请使用Construct on First Use Idiom,它利用了在首次调用函数时初始化函数范围静态的事实.