用C++实现Singleton的思路是把构造函数设为私有,通过静态函数GetInstance()获得对象的唯一实例.
见到很多例子都是使用指针来动态创建这个唯一实例,像这样:
Singleton
*
GetInstance()
{
if (instance == NULL){
instance = new Singleton();
}
return instance;
}
{
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 " ;
}
private :
Singleton()
{
}
static Singleton instance;
};
Singleton Singleton::instance;
int main()
{
Singleton::GetInstance().Print();
return 0 ;
}
using namespace std;
class Singleton
{
public :
static Singleton & GetInstance()
{
return instance;
}
void Print()
{
cout << " I'm singleton " ;
}
private :
Singleton()
{
}
static Singleton instance;
};
Singleton Singleton::instance;
int main()
{
Singleton::GetInstance().Print();
return 0 ;
}