2 回答
TA贡献1936条经验 获得超6个赞
// Singleton.hpp
class Singleton {
public:
static Singleton& Instance() {
static Singleton S;
return S;
}
private:
Singleton();
~Singleton();
};
此实现称为Meyers'Singleton。斯科特·迈耶斯(Scott Meyers)说:
“这种方法基于C ++的保证,即在调用该函数期间首次遇到对象的定义时,将初始化本地静态对象。” ...“此外,如果您从不调用模拟非本地静态对象的函数,那么就不会招致构造和破坏对象的费用。”
Singleton& s=Singleton::Instance() 首次调用 时,将创建该对象,并在下一次调用Singleton::Instance()结果时返回同一对象。主要问题:
受破坏订单惨败(相当于初始化订单惨败)的限制
另一个实现称为可信任的泄漏Singleton。
class Singleton {
public:
static Singleton& Instance() {
if (I == nullptr) { I = new Singleton(); }
return *I;
}
private:
Singleton();
~Singleton();
static Singleton* I;
};
// Singleton.cpp
Singleton* Singleton::I = 0;
两个问题:
泄漏,除非您实施Release并确保调用它(一次)
不是线程安全的
- 2 回答
- 0 关注
- 779 浏览
添加回答
举报