单例模式

Posted 编程猿来如此

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了单例模式相关的知识,希望对你有一定的参考价值。






点击上方“蓝字”,发现更多精彩。

在一些应用场景下需要控制某个类只能有一个实例对象。本文记录下实现方法。

单例类


01
PART
实现说明

①.构造函数定义为 private,另外提供获取对象实例的方法;

②.拷贝构造函数、拷贝赋值运算符定义为 delete,阻止拷贝赋值操作。

③.使用静态局部变量,只有使用时才会创建对象。


02
PART
代码示例
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;}};



单例模版基类

当有多个类需要控制实例数量时,可以采用模版及继承的方式实现代码复用。


01
PART
模版基类
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};

02
PART
派生类
class ExampleClass:public SinglePatternTemplate<ExampleClass>{ friend SinglePatternTemplate<ExampleClass>;public: ~ExampleClass(){} ExampleClass(const ExampleClass &) = delete ; ExampleClass & operator=(const ExampleClass &) = delete ;private: ExampleClass(){}};






扫码关注

持续获取最新文章
c++学习 算法与数据结构


以上是关于单例模式的主要内容,如果未能解决你的问题,请参考以下文章

常用代码片段

性能比较好的单例写法

片段作为 Android 中的单例

单例片段或保存网页视图状态

你熟悉的设计模式都有哪些?写出单例模式的实现代码

单例模式以及静态代码块