小编pip*_*pex的帖子

在T的构造函数中用*this = T()"初始化"T类型的对象是否安全?

在这种情况下,构造函数Year()是否安全?

struct Year {
   int year;
   Year(int y) : year(y) {}
   Year() { *this = Year(1970); } // *this = this->operator=(Year(1970));
};

Year y;
Run Code Online (Sandbox Code Playgroud)

我想是的,因为一旦执行流程到达构造函数体,就已经用int()初始化了year.还有其他需要考虑的问题吗?

不要考虑其他相同技巧可能导致麻烦的情况.

c++

4
推荐指数
1
解决办法
169
查看次数

静态数据成员是否真的可以进行延迟初始化?

是否可以在真正需要时初始化Singleton的实例?

考虑从着名的"设计模式"中获取的这种模式:

class Singleton {
public:
   static Singleton* Instance();
protected:
   Singleton();
private:
   static Singleton* _instance;
}

Singleton* Singleton::_instance = 0; // unit.cpp

static Singleton* Singleton::Instance() {
   if (_instance == 0) {
       _instance = new Singleton;
   }
   return _instance;
}
Run Code Online (Sandbox Code Playgroud)

现在,我认为那里的模式存在问题,如果有人希望将库中的Singleton提供给其他人:如果用户Singleton::Instance()在初始化_instance之前从另一个编译单元调用(例如在静态数据成员初始化期间),然后跟随调用Singleton::Instance()可能会创建Singleton的另一个实例,并产生不需要的结果,因为_instance可能首先被初始化为0.

我认为一种解决方案是以这种方式初始化_instance:

Singleton* Singleton::_instance = Singleton::Instance();
Run Code Online (Sandbox Code Playgroud)

无论如何,这使得初始化对于那些不需要调用Singleton :: Instance()来初始化其静态数据的人来说不是"懒惰".

是否有更好的解决方案,以便在需要Singleton实例时可以进行初始化?

c++ lazy-loading

3
推荐指数
1
解决办法
5116
查看次数

标签 统计

c++ ×2

lazy-loading ×1