单例模式
要点:
- 构造函数放在私有里面
- 提供一个静态的接口去调用构造函数获取对象
//要求:限制只能产生一个对象,在项目任意地方都可以获取到这个唯一对象
class Only
{
public:
static Only* get_Only()
/*给外界提供一个成员方法,使之可以调用构造函数获取一个对象。
但是这是一个普通的成员方法,由于普通的成员方法调用必须依赖this指针,
而this指针从对象来,外界此时又构造不了对象,
所以该成员方法不能依赖this指针,故定义为静态函数
*/
{
if (NULL == _only)//避免每一次进来都加锁,提升效率
{
_lock.lock();
if (NULL == _only)//确保只构造一个对象
{
_only = new Only();
}
_lock.unlock();
}
return _only;
}
private:
Only();//要调用构造函数就会重新构造对象,因此要想只产生一个对象,外部就不能随意调用构造函数
static mutex _lock;
static Only* _only;
};
Only* Only::_only = NULL;
mutex Only::_lock = mutex();