在C#中是微不足道的,但是在C ++(native,Win32,Visual C ++)中我看不到解决scheme。 所以,我有类MyClass1与不平凡的构造函数,并在MyClass2我想拥有types为MyClass1的静态成员:
MyClass1.h:
class MyClass1 { public MyClass1(type1 arg1, type2 arg2); }
MyClass2.h:
class MyClass2 { public: static MyClass1 Field1; }
和MyClass2.cpp:
MyClass1 MyClass2::Field1(arg1, arg2);
我期望这样的代码将初始化MyClass2 :: Field并在此初始化期间调用MyClass1构造函数。 但是,它看起来像编译器只分配Class1的内存,并从不调用构造函数,如果我这样做:
MyClass1 MyClass2::Field1 = *(MyClass1 *)malloc(sizeof(MyClass1));
在C ++中有没有“官方”的方式来初始化静态类成员与非平凡的构造?
您可能遇到静态初始化命令Fiasco 。 类或名称空间作用域的静态变量在执行main()之前被初始化,但是初始化的顺序依赖于链接时间因素。
为了解决这个问题,可以使用首次使用构造函数 ,它利用了函数调用时初始化函数范围静态的事实。
我不希望Vitaliy得到这种例外。 静态初始化顺序Fiasco需要两个对象,其中一个对象的初始化调用另一个对象的方法 。
这里我们在MyClass2中有一个静态初始化器,它调用另一个类(MyClass1)的构造函数 (不是方法)。 当然,我们不需要在调用构造函数之前初始化对象。
总之,我不知道为什么Vitaliy得到这个例外。 我会有兴趣知道答案,但它似乎不是由于静态初始化命令飞思卡尔。