单例模式
Posted 编程猿来如此
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。
①.构造函数定义为 private,另外提供获取对象实例的方法;
②.拷贝构造函数、拷贝赋值运算符定义为 delete,阻止拷贝赋值操作。
③.使用静态局部变量,只有使用时才会创建对象。
class Singleton
{
public:
~Singleton(){ cout << "调用了析构函数" <<endl;}
Singleton(const Singleton &) = delete ;//阻止拷贝
Singleton & operator=(const Singleton &) = delete ;//阻止赋值
static Singleton & getSingleObj()
{
static Singleton obj;//静态局部变量
return obj;//返回引用
}
private:
//构造函数为 private
Singleton(){ cout << "调用了构造函数" <<endl;}
};
当有多个类需要控制实例数量时,可以采用模版及继承的方式实现代码复用。
template < typename T>
class SinglePatternTemplate
{
public:
virtual ~SinglePatternTemplate() {}
SinglePatternTemplate(const SinglePatternTemplate &) = delete ;
SinglePatternTemplate & operator=(const SinglePatternTemplate &) = delete ;
static T& getSingleObj()
{
static T obj;
return obj;
}
protected:
SinglePatternTemplate(){};//构造函数定义为 protected
};
class ExampleClass:public SinglePatternTemplate<ExampleClass>
{
friend SinglePatternTemplate<ExampleClass>;
public:
~ExampleClass(){}
ExampleClass(const ExampleClass &) = delete ;
ExampleClass & operator=(const ExampleClass &) = delete ;
private:
ExampleClass(){}
};
以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章