生活随笔
收集整理的這篇文章主要介紹了
[设计模式]单例模式(懒汉式,饿汉式)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
實現(xiàn)單例步驟:
1.構(gòu)造函數(shù)私有化。
2.增加靜態(tài)私有的當(dāng)前類的指針變量。
3.提供靜態(tài)對外接口,可以讓用戶獲得單例對象。
單例 分為:
1.懶漢式
2.餓漢式
懶漢式
代碼如下:
class Singleton_lazy
{
public:static Singleton_lazy
*getInstance(){if (pSingleton
== nullptr){pSingleton
= new Singleton_lazy
;}return pSingleton
;}private:Singleton_lazy() {}static Singleton_lazy
* pSingleton
;
};Singleton_lazy
* Singleton_lazy
::pSingleton
= nullptr;
餓漢式
代碼如下:
#include <iostream>
using namespace std
;class Singleton_hungry
{public:
static Singleton_hungry
*getInstance(){return pSingleton
;}private:Singleton_hungry(){cout
<< "我是餓漢式" << endl
;}static Singleton_hungry
* pSingleton
;
};Singleton_hungry
* Singleton_hungry
::pSingleton
= new Singleton_hungry
;int main()
{cout
<< "main start" << endl
;return 0;
}
測試結(jié)果:
測試是否為單例?
代碼如下:
#include <iostream>
using namespace std
;class Singleton_lazy
{
public:static Singleton_lazy
*getInstance(){if (pSingleton
== nullptr){pSingleton
= new Singleton_lazy
;}return pSingleton
;}private:Singleton_lazy() {}static Singleton_lazy
* pSingleton
;
};Singleton_lazy
* Singleton_lazy
::pSingleton
= nullptr;class Singleton_hungry
{
public:static Singleton_hungry
*getInstance(){return pSingleton
;}
private:Singleton_hungry(){}static Singleton_hungry
* pSingleton
;
};Singleton_hungry
* Singleton_hungry
::pSingleton
= new Singleton_hungry
;void test01()
{Singleton_lazy
*p1
= Singleton_lazy::getInstance();Singleton_lazy
*p2
= Singleton_lazy::getInstance();if (p1
== p2
){cout
<< "兩個指針指向同一塊內(nèi)存空間,是單例" << endl
;}else{cout
<< "不是單例" << endl
;}Singleton_hungry
*p3
= Singleton_hungry::getInstance();Singleton_hungry
*p4
= Singleton_hungry::getInstance();if (p3
== p4
){cout
<< "兩個指針指向同一塊內(nèi)存空間,是單例" << endl
;}else{cout
<< "不是單例" << endl
;}}int main()
{test01();return 0;
}
測試結(jié)果:
單例對象釋放問題:
不需要考慮內(nèi)存釋放,只有一個對象,占的內(nèi)存太小,不會造成內(nèi)存泄漏。
單例碰到多線程:
懶漢式碰到多線程,是線程不安全的。
餓漢式碰到多線程,是線程安全的。
總結(jié)
以上是生活随笔為你收集整理的[设计模式]单例模式(懒汉式,饿汉式)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。