iBr*_*aAa 4 c++ singleton static c++11
有什么区别:
class A {
 public:
   static const A& GetInstance() {
     static A a;
     return a;
   }
};
和
class B {
  public:
   static const B* GetInstance() {
     static B* b = new B;
     return b;
   }
};
?A和B之间的Singleton的寿命是否存在差异?对象的内存位置?一般的差异?
在这两种情况下,对象的生命周期是不同的.C++保证静态本地对象将以与构造相反的顺序销毁.在这两种情况下,构造都会在GetInstance首次调用时发生.
但是,在第二种情况下,为变量b分配了一个分配的指针new.当b从静态存储删除,该内存将保持到堆终于拆掉了.在那个阶段,它将被视为"泄露",并且B永远不会调用析构函数(如果有的话).
最好像这样实现基于指针的方法:
class B {
  public:
   static const B* GetInstance() {
     static std::unique_ptr<B> b( new B );
     return b.get();
   }
};
现在,B::~B()将调用(如果适用)并且在b销毁时将正确删除内存,并且生命周期与第一个示例相同.
这只是留下你关于内存位置的问题.位置会有所不同.静态变量通常存储在程序的数据段中,而分配的任何内容new都将存储在堆中.
| 归档时间: | 
 | 
| 查看次数: | 868 次 | 
| 最近记录: |