【帶頭學C++】----- 九、類和對象 ---- 9.10 C++設計模式之單例模式設計

??????????????????????麻煩您點個關注,不迷路????????????????????????

目 錄

9.10 C++設計模式之單例模式設計

? ?舉例說明:


9.10 C++設計模式之單例模式設計

看過我之前的文章的,簡單講解過C++/Qt的設計模式。簡單回顧一下:
回看設計模式章節點這里icon-default.png?t=N7T8https://blog.csdn.net/Phofomy/article/details/131247977?spm=1001.2014.3001.5502

不想回看???我在下面放個截圖,簡單回顧一下吧~

????????實際上Qt的設計模式和C++基本上相差無幾,Qt就是C++的圖形GUI庫,其底層實現完全結合了C++的知識,可以直接使用C++進行混合編程,那看完了Qt的相關的設計模式介紹,那么我們接下來,主要學習的是C++中單例設計模式的一些基本概念和實現;

首先:C++單例設計模式是什么?

根據圖中:單例模式是一個類只有一個實例,那c++呢?其實是大同小異的!

????????C++ 單例設計模式是一種用于創建只能有一個實例的類的軟件設計模式。它確保一個類只有一個實例,并提供了一個全局訪問該實例的訪問點。

????????在單例模式中,類的構造函數必須是私有的,以防止在類的外部對其進行實例化。通過使用一個靜態方法或靜態成員函數來創建類的唯一實例,然后每次調用該方法時返回相同的實例。

? ?舉例說明:

class Singleton {
private:// 私有化構造函數,以防止在類的外部實例化該類Singleton() {}public:// 獲取單例實例的靜態成員函數static Singleton& getInstance() {// 使用靜態局部變量確保只有一個實例被創建static Singleton instance;return instance;}
};

????????C++單例設計模式實際上在開發過程中,也是比較常用的設計模式之一。使用單例模式,可以保證在整個程序執行期間只有一個類的實例存在,從而確保全局共享和唯一性。這在需要創建唯一資源或共享狀態的情況下非常有用,例如數據庫連接、日志記錄器或全局配置對象等。

????????單例模式是一種常用的軟件設計模式。在它的核心結構中只包含一個被稱為單例的特殊類。通過單例模式可以保證系統中一個類只有一個實例而且該實例易于外界訪問,從而方便對實例個數的控制并節約系統資源。如果希望在系統中某個類的對象只能存在一個,單例模式是最好的解決方案;

案例: 實現一個單例模式

代碼:

#include <iostream>using namespace std;
class Singleton{ //單例模式
private://構造私有化 防止實例化其他對象 將構造函數私有化,外界無法構造函數Singleton(){count=0;cout<<"構造"<<endl;}Singleton(const Singleton &ob){count=0;}~Singleton(){cout<<"析夠"<<endl;}
private://第二步:定義一個靜態的指針變量保存唯一實例的地址//const防止p 在類內部 被修改指向static Singleton * const p;//保存唯一的實例地址int count;//統計任務執行次數
public://第三步: 獲取唯一的實例地址static Singleton * getSingleton(void){return p;}//第四步:實現用戶自定義的操作函數void printString(const char *str){cout << "打印:"<<str<<endl;}
};//這一步也很重要,初始化一個單例實例指針
Singleton * const Singleton::p = new Singleton;void test01(){Singleton *p1 = Singleton::getSingleton();p1->printString("離職證明p1_1");p1->printString("身份證明p1_2");p1->printString("學歷證明p1_3");Singleton *p2 = Singleton::getSingleton();p2->printString("離職證明p2_1");//按住alt鼠標下拉可以同時修改一列p2->printString("身份證明p2_2");p2->printString("學歷證明p2_3");
}
int main()
{test01();return 0;
}

????????注意:在多線程環境下,需要考慮線程安全性,并采取適當的線程安全措施來保護單例實例的創建和訪問。

代碼:

class Singletons {
private:// 將構造函數和拷貝構造函數設為私有,以防止在類的外部實例化該類或進行拷貝構造Singletons() {}Singletons(const Singletons&) {}static Singletons* instance; // 單例實例的指針public:// 獲取單例實例的靜態成員函數static Singletons& getInstance() {// 使用雙重檢查鎖定確保線程安全if (instance == nullptr) {// 加鎖// ...if (instance == nullptr) {instance = new Singletons();}// 解鎖// ...}return *instance;}void printMessage() {std::cout << "Hello, Singleton!" << std::endl;}
};Singletons* Singletons::instance = nullptr; // 初始化單例實例指針為空void test02() {Singletons& singleton = Singletons::getInstance(); // 獲取單例實例singleton.printMessage(); // 調用打印方法
}

以上,就是我們對C++的單例設計模式一個學習內容,看完的小伙伴記得去敲一遍代碼試試哦。

點贊👍? + 收藏👐 + 關注👌

??您的支持??,是博主最大的動力??!!互相學習??!!共同進步??!!一起搞錢??!!??

???????????????????????????????????????????????????????????????

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/206858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/206858.shtml
英文地址,請注明出處:http://en.pswp.cn/news/206858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

遙測終端機RTU:實現遠程監測和控制的重要工具

遙測終端機RTU對設備進行遠程監測和控制&#xff0c;支持采集和傳輸數據&#xff0c;以實現對工業過程、公用事業、水文和環境的監測和管理。 遙測終端機RTU工作原理 計訊物聯遙測終端機RTU通過網口、串口進行傳感器/設備等現場數據采集&#xff0c;將其轉換為數字信號&#xf…

【LeetCode】202. 快樂數

202. 快樂數 難度&#xff1a;簡單 題目 編寫一個算法來判斷一個數 n 是不是快樂數。 「快樂數」 定義為&#xff1a; 對于一個正整數&#xff0c;每一次將該數替換為它每個位置上的數字的平方和。然后重復這個過程直到這個數變為 1&#xff0c;也可能是 無限循環 但始終變…

高校網站建設的效果如何

高校有較高的信息承載需求、招生宣傳、學校內容呈現、內部消息觸達等需求&#xff0c;對高校來說&#xff0c;如今互聯網深入生活各個場景&#xff0c;無論學校發展、外部拓展還是內部師生互動、通知觸達等都需要完善。 除了傳統傳單及第三方平臺展示外&#xff0c;學校構建屬…

C#-數組池減少GC工作

數組池減少GC工作 通過ArrayPool類&#xff08;名稱空間System.Buffers&#xff09;使用數組池&#xff0c;可減少垃圾收集器的工作&#xff0c;ArrayPool管理一個數組池&#xff0c;數組可以從這租借&#xff0c;并返回池中&#xff0c;內存在ArrayPool中管理。 創建ArrayPool…

Html5響應式全開源網站建站源碼系統 附帶完整的搭建教程

Html5響應式全開源網站建站源碼系統是基于Html5、CSS3和JavaScript等技術開發的全開源網站建站系統。它旨在為初學者和小型企業提供一套快速、簡便的網站建設解決方案。該系統采用響應式設計&#xff0c;可以自適應不同設備的屏幕大小&#xff0c;提高用戶體驗。同時&#xff0…

Clean My Mac X2024解鎖完整版本

Clean My Mac X是Mac上一款美觀易用的系統優化清理工具&#xff0c;也是小編剛開始用Mac時的裝機必備。垃圾需要時時清&#xff0c;電腦才能常年新。Windows的垃圾清理工具選擇有很多&#xff0c;但是Mac的清理工具可選擇的就很少。 今天給大家推薦大名鼎鼎的Clean My Mac X&a…

elasticsearch-head 啟動教程

D:\elasticsearch-head-master>grunt server ‘grunt’ 不是內部或外部命令&#xff0c;也不是可運行的程序 或批處理文件。 npm install -g grunt-clinpm install

Leetcode—190.顛倒二進制位【簡單】

2023每日刷題&#xff08;五十二&#xff09; Leetcode—190.顛倒二進制位 算法思路 實現代碼 class Solution { public:uint32_t reverseBits(uint32_t n) {uint32_t res 0;for(int i 0; i < 32 && n > 0; i) {res | (n & 1) << (31 - i);n >&…

【華為數據之道學習筆記】1-1非數字原生企業的特點

非數字原生企業的數字化轉型挑戰 軟件和數據平臺為核心的數字世界入口&#xff0c;便捷地獲取和存儲了大量的數據&#xff0c;并開始嘗試通過機器學習等人工智能技術分析這些數據&#xff0c;以便更好地理解用戶需求&#xff0c;增強數字化創新能力。部分數字原生企業引領著云計…

第二十一章,網絡通信

網絡協議 IP協議 IP是Internet Protocol的簡稱&#xff0c;是一種網絡協議。Internet 網絡采用的協議是TCP/IP協議&#xff0c;其全稱是Transmission Control Protocol/Internet Protocol。Internet 依靠TCP/IP協議&#xff0c;在全球范圍內實現了不同硬件結構、不同操作系統…

淺談Android 14適配

引言 距離 Android 14 發布已經有一段時間了&#xff0c;趁著這次機會&#xff0c;了解和熟悉了 Android 14 更新的內容&#xff0c;現在來和大家分享一下&#xff0c;大家喜歡的話可以點個贊多多支持一下&#xff0c;文章的內容按照適配內容的重要程度進行排序。 targetSdk …

機器學習實戰:預測波士頓房價

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天來學習一下機器學習中一個非常經典的案例&#xff1a;預測波士頓房價&#xff0c;在此過程中也會補充很多重要的知識點&#xff0c;歡迎大家一起前來探討學習~ 一、導入數據 在這個項目中&#xff0c;我們利用馬薩諸…

python-根據文件名移動已處理的文件

假設NC文件所在的文件夾為"nc_files"&#xff0c;CSV文件所在的文件夾為"csv_files"&#xff0c;目標文件夾為"target_folder"&#xff1a; import os import shutilnc_folder nc_files csv_folder csv_files target_folder target_folder# …

SAP UI5 walkthrough step4 XML Views

SAPUI5 指出多種VIEW類型&#xff0c;包括XML,HTML,JavaScript 推薦使用XML&#xff0c;因為可讀性更高 我們提前介紹一下MVC架構。 MVC是一種軟件架構模式&#xff0c;它包括三個主要組件&#xff1a;模型&#xff08;Model&#xff09;、視圖&#xff08;View&#xff09;…

element el-pagination solt 使用

起初只是想修改一下&#xff0c;共多少條的顏色&#xff0c;和跳轉至 發現并不支持 網上找通過js修改&#xff0c;因為我這是在 dialog里面的 好像并不能適用 mounted() {document.getElementsByClassName("el-pagination__jump")[0].childNodes[0].nodeValue &quo…

企業集團采購系統(供應商、詢價、招投標)-源碼

一、業務需求 企業招標詢價供應商管理系統是一種專業的采購管理系統&#xff0c;旨在幫助企業實現供應商關系的管理和采購成本的控制。該系統涵蓋了企業采購管理的各個方面&#xff0c;包括采購預算、供應商管理、產品管理、采購計劃、詢價、競價、招標、采購訂單、采購合同執…

Python零基礎入門之詳解sort排序使用

文章目錄 1.前言2.環境準備3.程序實現4.sort拓展關于Python技術儲備一、Python所有方向的學習路線二、Python基礎學習視頻三、精品Python學習書籍四、Python工具包項目源碼合集①Python工具包②Python實戰案例③Python小游戲源碼五、面試資料六、Python兼職渠道 1.前言 昨天一…

低代碼平臺選型標準:功能、應用與優劣勢分析

在數字化轉型的浪潮下&#xff0c;中小企業面臨滿足市場需求、提高效率和競爭力的挑戰。低代碼平臺做為數字化轉型的重要工具&#xff0c;為中小企業帶來了快速開發和定制應用程序解決方案。但是&#xff0c;在很多低代碼平臺中&#xff0c;選擇是一個重要的環節。企業應該根據…

Linux學習教程(第十一章 Linux高級文件系統管理)二

第十一章 Linux高級文件系統管理&#xff08;二&#xff09; 九、Linux如何判斷磁盤配額是否生效&#xff1f; 我們的磁盤配額已經生效&#xff0c;接下來測試一下是否會限制我們的用戶。以 lamp1 用戶為例&#xff0c; 因為 lamp1 用戶除容量被限制外&#xff0c;也限制了文…

如何選擇靠譜的軟件測試外包公司?CMA、CNAS軟件測試報告獲取

作為信息科技產業的代表之一&#xff0c;軟件公司受到了越來越多的關注&#xff0c;它們的發展為我國的科技創新提供了強大的戰略支撐。軟件測試作為提升軟件產品質量的后盾&#xff0c;日益成為一個專業化、標準化和規范化的行業&#xff0c;軟件測試外包公司就是這種背景下成…