有没有一种延迟初始化类的静态子对象的方法?

时间:2012-02-19 12:15:21

标签: c++ static-members lazy-initialization

有没有办法在main()启动后初始化类的静态子对象?

2 个答案:

答案 0 :(得分:2)

一种方法是替换静态成员函数的静态成员数据。

说你是这堂课:

class A
{
   static B static_b; //static member data
};

//.cpp
B A::static_b; //definition (required)

因此,您可以将您的课程定义为:

class A
{
   static B static_b()  //static member function!
   {
       static B b;
       return b;
   }
};

请注意,它不是线程安全的,但您也可以使其成为线程安全的。

答案 1 :(得分:0)

您可以使用此对象的指针:

class SomeClass{
public:
    static SomeOtherClass* p;
};

SomeOtherClass* SomeClass::p;    

void main(){
    SomeClass::p = new SomeOtherClass();
}