sky*_*oor 2 c++ singleton design-patterns
我对singlton有疑问.
我应该在哪里声明单例类的静态成员?
为什么不这样工作呢
class singleton{
private:
static singleton & m_singleton;
public:
static singleton& get_instance{
return m_singleton;
}
}
Run Code Online (Sandbox Code Playgroud)
但我必须是这样的
class singleton{
public:
static singleton& get_instance{
static singleton & m_singleton;
return m_singleton;
}
}
Run Code Online (Sandbox Code Playgroud)
差异是什么?
我知道有另一种方法可以使用指针,但现在我只讨论使用对象的情况.
另外一个问题是,使用指针和单身人士参考的利弊是什么?
非常感谢!
在第一种情况下,在程序初始化之前,在main()调用之前构造单例(构造函数被调用).在这种情况下,您还需要在cpp文件中的某处定义静态变量.
在第二种情况下,在首次调用函数时构造单例.请注意,此实现不是线程安全的,因为函数中的静态变量初始化不是线程安全的.如果两个线程在第一次看到这个函数时,你很可能会得到两个单例.
另请注意,第二个中有一个错误.没有初始化,您无法定义参考.这个
static SomeClass &var;
Run Code Online (Sandbox Code Playgroud)
不编译.您需要删除引用以创建类的实际实例,而不是引用,然后返回对它的引用.
如果在第二个示例中将静态变量定义为指针,则可以通过仔细初始化指针来避免我提到的线程问题.在这篇类文章中阅读更多相关内容(讨论Java,但核心问题是相同的)