,,C++ 中的单例模式(普通,2B,文艺)

,,C++ 中的单例模式(普通,2B,文艺)

这篇文章主要介绍C中的单例模式写法,主要包括普通、2B、文艺三种写法,需要的朋友可以参考下

一、普通Singleton

复制代码代码如下:# includeiostreamusing命名空间标准类Singleton { public:static Singleton * getInstance();私人:静态单身*实例;singleton(){ cout '构造函数\ n ';//做点什么};~Singleton() { cout '析构函数\ n ';//做点什么} };Singleton * Singleton:instance=NULL;Singleton * Singleton:getInstance(){ if(instance==NULL)instance=new Singleton();返回实例;} int main(){ cout ' begin main \ n ';Singleton * instance=Singleton:getInstance();cout " end main \ n}

但是这样构造函数不会自动调用,需要用户这个类的用户手动删除实例。这样是不太好的

这是懒汉式的,在多线程的情况下需要同步。也可以写成饿汉式的,但是c里面写成饿汉式的不太好,如果有多个单例类,而他们是相互引用的,那么饿汉式就有可能出问题。因为在C中,这几个单例类的静态成员的初始化顺序是不确定的。

二、2B的Singleton

复制代码代码如下:# includeiostreamusing命名空间标准类Singleton { public:static Singleton * getInstance();私人:静态单身*实例;singleton(){ cout '构造函数\ n ';//做点什么};~Singleton() { cout '析构函数\ n ';//做点什么}类Garbo { public:~ Garbo(){ cout ' Garbo destructor \ n ';if(Singleton:instance!=空)删除singleton:instance;} };静态嘉宝嘉宝;};Singleton * Singleton:instance=NULL;单身人士:嘉宝单身人士:嘉宝;Singleton * Singleton:getInstance(){ if(instance==NULL)instance=new Singleton();返回实例;} int main(){ cout ' begin main \ n ';Singleton * instance=Singleton:getInstance();cout " end main \ n}用了一个内部类嘉宝。由于主要的结束后,会自动释放嘉宝,而垃圾工人就会调用情况的析构函数。

三、文艺Singleton

复制代码代码如下:# includeiostreamusing命名空间标准类Singleton { public:static Singleton * getInstance();私人:静态单例实例;singleton(){ cout '构造函数\ n ';//做点什么};~Singleton() { cout '析构函数\ n ';//做点什么} };Singleton Singleton:instance;Singleton * Singleton:getInstance(){ return instance;} int main(){ cout ' begin main \ n ';Singleton * instance=Singleton:getInstance();cout " end main \ n}实例在主要的开始前就已经构造好了,在主要的结束后会自动释放。

但是这样的话,只能是饿汉式的单身者。如果在构造函数中需要申请大量资源,这些资源就一直存在在整个运行阶段。而不管这些资源什么时候需要,什么时候不许要。

四、改进的文艺Singleton

复制代码代码如下:# includeiostreamusing命名空间标准类Singleton { public:static Singleton * getInstance();private:Singleton(){ cout '构造函数\ n ';//做点什么};~Singleton() { cout '析构函数\ n ';//做点什么} };Singleton * Singleton:getInstance(){静态一个实例;返回实例;} int main(){ cout ' begin main \ n ';Singleton * instance=Singleton:getInstance();cout " end main \ n}

这样,就可以在需要的时候再构造单身,也就是懒汉式的。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • vs2015打包安装程序,vs2015程序打包,VS2022实现VC++打包生成安装文件图文详细历程
  • vc++6.0的快捷键,vc 快捷键
  • vc++6.0的快捷键,vc 快捷键,VC6.0常用快捷键大全
  • 绘制圆角矩形的方法,c++ 画矩形,C#画圆角矩形的方法
  • 懒汉式和饿汉式代码,单列模式懒汉和饿汉,C++单例模式的懒汉模式和饿汉模式详解
  • 好用的C++编译器,c++编译软件哪个好
  • semaphore c#,c++ semaphore
  • semaphore c#,c++ semaphore,C++中Semaphore内核对象用法实例
  • dev-c++使用教程,dev c++安装教程
  • dev-c++使用教程,dev c++安装教程,Dev C++ 安装及使用方法(图文教程)
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针
  • C里面指针常量和常量指针的区别,c++指针常量和常量指针,简单总结C++中指针常量与常量指针的区别
  • com组件初始化失败,c#开发com组件,C++中COM组件初始化方法实例分析
  • c++静态成员变量使用,c++静态成员函数和静态成员变量
  • c++静态成员变量使用,c++静态成员函数和静态成员变量,详解c++ 静态成员变量
  • 留言与评论(共有 条评论)
       
    验证码: