- 解决如何创建唯一对象的问题
- 实现方法:
- 通过一static变量记录唯一对象实例
- 提供static接口获取这个实例
- 禁用其它对象创建接口(构造函数私有化)
- 示例代码:
1 #include <iostream> 2 using namespace std; 3 4 class Singleton 5 { 6 public: 7 static Singleton& Instance() { return s; } 8 private: 9 static Singleton s;//静态数据成员的类型可以是其所属类 10 private: 11 Singleton() {} 12 Singleton(const Singleton&); 13 }; 14 15 //唯一对象 16 Singleton Singleton::s; 17 18 int main() 19 { 20 Singleton& s = Singleton::Instance(); 21 22 return 0; 23 }
- 问题:静态变量有个初始化顺序问题,解决办法是将静态变量定义在函数中,仅当调用此函数时才初始化该静态变量
- 示例代码:
1 #include <iostream> 2 using namespace std; 3 4 class Singleton 5 { 6 public: 7 //静态变量放入函数中,调用时初始化 8 static Singleton& Instance() 9 { 10 static Singleton s; 11 return s; 12 } 13 private: 14 Singleton() {} 15 Singleton(const Singleton&); 16 }; 17 18 int main() 19 { 20 Singleton& s = Singleton::Instance(); 21 22 return 0; 23 }
- 参考:
- 《Tinking in C++》