设计模式
通过某个类在内存中只能创建唯一的一个对象;
1.该对象不是栈(全局)对象;
2.该对象只能是堆对象。
实现步骤
1.将构造函数私有化;
2.在类中定义一个静态的指针变量(一般为私有),并在类外初始化为空;
3.定义一个返回值为类指针的静态成员函数。如果2中的指针对象为空,则初始化对象;若非空,直接返回该对象,保证类在内存中只有一个对象。
应用场景
1.单例模式替换全局变量;
2.配置文件的内容可用单例对象存储;
3.词典文件、网页库等。
实现代码
#include <iostream>
using std::cout;
using std::endl;
class Singleton
{
public:
static Singleton * getInstance()
{
if(_pInstance == nullptr) {
_pInstance = new Singleton();
}
return _pInstance;
}
static void destroy()
{
if(_pInstance)
delete _pInstance;
}
void print() const
{
cout << "Singleton::data = " << _data << endl;
}
private:
Singleton():_data(0){ cout << "Singleton()" << endl; }
~Singleton(){ cout << "~Singleton()" << endl; }
private:
int _data;
static Singleton * _pInstance;
};
Singleton * Singleton::_pInstance = nullptr;
int main(void)
{
//Singleton s1;//与要求不符合,该语句不能让他编译通过
//s1.print();
//Singleton s2;//构造函数是私有的
//s2.print();
//Singleton * p = new Singleton();//不能在类外调用构造函数
Singleton * p1 = Singleton::getInstance();
Singleton * p2 = Singleton::getInstance();
Singleton::getInstance()->print();
//delete p1;//该语句不能让他编译通过
//delete p2;/会调用析构函数,但是析构函数是私有的
Singleton::destroy();
return 0;
}