设计模式上的singleton模式是声明了一个static的Singleton指针,当getInstance被调用的时候再new出一个对象然后赋值给这个指针。然而这样会有一个问题,即这个new出来的对象应该何时释放?如果只是内存没有释放问题还不大,但是如果这个Singleton还占有资源,而程序退出还没有释放就会有问题了。
这里有一个Singleton的实现:
class CSingleton
{
private:
CSingleton()
{
std::cout << "Singleton contructed!" << std::endl;
}
~CSingleton()
{
std::cout << "Singleton destructed!" << std::endl;
system("pause");
}
public:
static CSingleton* getInstance()
{
static CSingleton instance;
return &instance;
}
};
这样,当程序结束时就会调用这个Singleton的解析函数。而且由于instance是个局部变量,如果getInstance没有调用,instance对象也不会被初始化。
下面是测试程序:
int _tmain(int argc, _TCHAR* argv[])
{
std::cout << "Start!" << std::endl;
CSingleton* singleton = CSingleton::getInstance();
std::cout << "End!" << std::endl;
return 0;
}
输出结果是:
Start!
Singleton contructed!
End!
Singleton destructed!
可以看出这种singleton实现比较有优势。