【问题标题】:Is there a way of lazy initializing a static sub-object of a class?有没有一种懒惰初始化类的静态子对象的方法?
【发布时间】:2012-02-19 12:15:21
【问题描述】:

有没有办法在 main() 启动后初始化静态类成员?

【问题讨论】:

  • 你说的静态子对象是什么意思?你是说静态成员吗?
  • 是一个静态成员,它是一个嵌入类的对象

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


【解决方案1】:

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

假设你有这门课:

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;
   }
};

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

【讨论】:

  • 这似乎没问题,因为对象 b 将在 main() 结束时自动销毁。这不是很像单例吗?
  • @user1042389:它与单例相似,通过调用 static 函数来访问要使用的数据.但是A 类本身并不是单例。
【解决方案2】:

你可以为这个对象使用一个指针:

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

SomeOtherClass* SomeClass::p;    

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

【讨论】:

  • 但是这个分配必须手动销毁。我想避免这种情况。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-25
  • 2021-06-15
  • 2016-11-10
  • 2020-11-25
  • 2013-07-20
  • 1970-01-01
相关资源
最近更新 更多