日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

单例类模板

發布時間:2025/4/5 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 单例类模板 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

    • 1 單例類模板
      • 1.1 單例模式簡介
      • 1.2 單例類模板

1 單例類模板

1.1 單例模式簡介

需求的提出:在架構設計時,某些類在整個系統生命期中最多只能有一個對象存在(Single Instance)。

問題:如何定義一個類,使得這個類最多只能創建一個對象?

要控制類的對象數目,必須對外隱藏構造函數。思路如下:

  • 將構造函數的屬性設置為private。
  • 定義instance并初始化為NULL。
  • 當需要使用對象時,訪問instance的值:
    - 空值:創建對象,并用instance標記。
    - 非空值:返回instance標記對象。

編程實驗:單例模式初探

#include <iostream> #include <string>using namespace std;class SObject {static SObject* c_instance;SObject(const SObject&);SObject& operator= (const SObject&);SObject(){} public:static SObject* GetInstance();void print(){cout << "this = " << this << endl;} };SObject* SObject::c_instance = NULL;SObject* SObject::GetInstance() {if( c_instance == NULL ){c_instance = new SObject();}return c_instance; }int main() {SObject* s = SObject::GetInstance();SObject* s1 = SObject::GetInstance();SObject* s2 = SObject::GetInstance();s->print();s1->print();s2->print();return 0; }

如上實現存在的問題:

  • 當我們需要使用單例模式時:必須定義靜態成員變量c_instance,必須定義靜態成員函數GetInstance()。

解決方案:

  • 將單例模式相關的代碼抽取出來,開發單例類模板。當需要單例類時,直接使用單例類模板。

1.2 單例類模板

實現和使用方法如下:

Singleton.h:

#ifndef _SINGLETON_H_ #define _SINGLETON_H_template < typename T > class Singleton {static T* c_instance; public:static T* GetInstance(); };template < typename T > T* Singleton<T>::c_instance = NULL;template < typename T > T* Singleton<T>::GetInstance() {if( c_instance == NULL ){c_instance = new T();}return c_instance; }#endif

main.cpp:

#include <iostream> #include <string> #include "Singleton.h"using namespace std;class SObject {friend class Singleton<SObject>; // 當前類需要使用單例模式SObject(const SObject&);SObject& operator= (const SObject&);SObject(){} public:void print(){cout << "this = " << this << endl;} };int main() {SObject* s = Singleton<SObject>::GetInstance();SObject* s1 = Singleton<SObject>::GetInstance();SObject* s2 = Singleton<SObject>::GetInstance();s->print();s1->print();s2->print();return 0; }

參考資料:

  • C++深度解析教程
  • 總結

    以上是生活随笔為你收集整理的单例类模板的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。