用C++实现Singleton的思路是把构造函数设为私有,通过静态函数GetInstance()获得对象的唯一实例.
见到很多例子都是使用指针来动态创建这个唯一实例,像这样:
Singleton* GetInstance()
{
if (instance == NULL){
instance = new Singleton();
}
return instance;
}
这样也和其他语言中的做法类似.但是C++没有垃圾回收机制,这样创建的实例没办法安全地回收.所以觉得用引用更安全一些.
#include <iostream>
using namespace std;
class Singleton
{
public:
static Singleton& GetInstance()
{
return instance;
}
void Print()
{
cout<<"I'm singleton\n";
}
private:
Singleton()
{
}
static Singleton instance;
};
Singleton Singleton::instance;
int main()
{
Singleton::GetInstance().Print();
return 0;
}