在面向对象的开发实践中,我们经常会遇到需要保持类的单一实例的时候。比如作为工具类。单例模式的实现方式一般有两种:其一,利用全局对象,通过对全局对象的内容进行判定,是否为空,如果为空,则创建对象,否则就返回已有的对象实例。这种方法在遇到多线程的时候,需要注意在创建实例对象之前加锁,否则会发生错误;第二种则是利用静态局部变量的特性,此种方法较为方便,也不需要考虑在多线程下的特殊情况,接下来以第二种方法举例。
singleton.h
#ifndef _SINGLETON_H_
#define _SINGLETON_H_
#define DISABLE_COPY(classname) \
private:\
classname(const classname&);\
classname& operator = (const classname&);
class singleton{
DISABLE_COPY(singleton) //防止赋值与复制拷贝
singleton(); //默认构造为私有
public:
~singleton();
static singleton* getInstance(){
static singleton __instance;
return &__instance;
}
};
#endif
singleton.cpp
#include "singleton.h"
#include <iostream>
using std::cout;
using std::endl;
//默认构造子
singleton::singleton()
{}
//析构函数
singleton::~singleton()
{}
//测试
int main(int argc, char* argv[])
{
singleton *l_oSinglenton1 = singleton::getInstance();
singleton *l_oSinglenton2 = singleton::getInstance();
cout << l_oSinglenton1 << endl;
cout << l_oSinglenton2 << endl;
getchar();
}
输出结果显示,
oSinglenton1的内容与oSinglenton2相等,则二者代表相同的对象。