【发布时间】:2015-04-22 13:48:07
【问题描述】:
我将使用单例模式演示我的问题,但这是一个更广泛的问题。请放过我“单身者是邪恶的”讲座。
Singleton 的第 1 版
class Singleton
{
public:
static Singleton& getInstance()
{
static Singleton instance; // This becomes a class member in Ver.2
return instance;
}
private:
// Constructor, forbid copy and assign operations etc...
}
Singleton 的第 2 版
class Singleton
{
public:
static Singleton& getInstance()
{
return instance;
}
private:
static Singleton instance; // I'm here now!
// Constructor, forbid copy and assign operations etc...
}
我现在将解释我认为两者之间的区别:
版本 1 instance 只会在程序流达到instance 的实际定义时才被初始化(即程序的某些部分使用Singleton::getInstace() 请求实例)。换句话说,惰性实例化。
它将仅在程序终止时被销毁。
版本 2 instance 将在程序开始时初始化,在调用 main() 之前。也只会在程序终止时被销毁。
首先,我的上述假设是否正确?
其次,这种初始化行为是否普遍(比如全局变量和函数)?
最后,在这方面我还有什么需要注意的细微差别吗?
谢谢!
【问题讨论】:
标签: c++ static initialization singleton