这篇文章主要介绍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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。