【學習筆記】單例類模板

【學習筆記】單例類模板

一、單例類模板

以下為一個通用的單例模式框架,這種設計允許其他類通過繼承Singleton模板類來輕松實現單例模式,而無需為每個類重復編寫單例實現代碼。

// 命名空間(Namespace) 和 模板(Template)
// 命名空間用于將代碼組織成邏輯組,避免不同模塊間的命名沖突
// 泛型實現:T 可以是任意類型(如 int、std::string、自定義類)。編譯時實例化:編譯器會為每個使用的具體類型生成對應的代碼。namespace core {
template <typename T>class Singleton {// 獲取單例實例的靜態方法public:static T& Instance() {static T instance{Token{}};return instance;}// 防止單例對象被復制或賦值,確保全局唯一性。Singleton(const Singleton&) = delete;Singleton& operator=(const Singleton) = delete;// Token 結構體:一個空的標記類型,用于讓派生類能夠調用基類的構造函數(因為構造函數是受保護的)。受保護的構造函數:防止外部直接實例化Singleton,但允許派生類繼承。protected:struct Token {};Singleton() = default;~Singleton() = default;
};

繼承單例類模板實例:

class IpSourceManage : public core::Singleton<IpSourceManage>
{
public:IpSourceManage(Token){};~IpSourceManage(){};..........};

二、單例類標志

靜態獲取方法(如 Instance())

單例類必須提供一個靜態方法來獲取唯一實例,通常命名為 Instance()。

static MyClass instance;  // 靜態實例(餓漢式)static MyClass& Instance() {static MyClass instance;  // 懶漢式(C++11后線程安全)return instance;
}

private 或 protected 構造函數

禁止外部直接實例化,只能通過 Instance() 方法創建對象。

class Nodes : public Node /*, public NodeMatch */ {public:private:Nodes();~Nodes();..........

禁用拷貝和賦值

delete 關鍵字:顯式刪除拷貝構造函數和賦值運算符,防止對象被復制。

MyClass(const MyClass&) = delete;              // 禁用拷貝構造
MyClass& operator=(const MyClass&) = delete;   // 禁用賦值

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

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

相關文章

yolo 訓練 中間可視化

yolo訓練前幾個batch&#xff0c;會可視化target: if plots and ni < 33:f save_dir / ftrain_batch{ni}.jpg # filenameplot_images(imgs, targets, paths, f, kpt_labelkpt_label)

【Linux】虛擬機代理,自動化腳本修改~/.bashrc

二選一執行 {echo ""echo "# Cla Verge代理設置 "echo "alias use-proxyexport http_proxy\"socks5h://192.168.88.1:7897\"; export https_proxy\"socks5h://192.168.88.1:7897\""echo "alias use-proxy-httpexport…

JavaScript 原型與原型鏈:深入理解 __proto__ 和 prototype 的由來與關系

引言 在 JavaScript 的世界中&#xff0c;原型和原型鏈是理解這門語言面向對象編程&#xff08;OOP&#xff09;機制的核心。不同于傳統的基于類的語言如 Java&#xff0c;JavaScript 采用了一種獨特的原型繼承機制。本文將深入探討 __proto__ 和 prototype 的由來、關系以及它…

Linux非管理員用戶安裝python環境

目錄 1. 下載2. 解壓3. 配置并指定安裝路徑&#xff08;本地用戶目錄&#xff09;4. 編譯&#xff08;不安裝系統目錄&#xff09;5. 安裝到本地用戶目錄6. 添加 Python 到環境變量7. 驗證安裝是否成功 1. 下載 版本根據需要自行指定 cd /tmp wget https://www.python.org/ft…

獵板PCB:建滔PCB板材怎么樣?

在電子元器件的精密世界中&#xff0c;PCB板材如同骨骼般支撐著整個產品的性能與壽命。面對市場上琳瑯滿目的品牌選擇&#xff0c;建滔積層板憑借三十余年技術沉淀&#xff0c;逐漸成為行業工程師與采購方口中的“品質代名詞”。今天&#xff0c;我們不談參數堆砌&#xff0c;只…

ONLYOFFICE協作空間3.1.1 企業版 介紹及部署說明:家庭云計算專家

ONLYOFFICE協作空間3.1企業版是一款專為深度集成需求設計的開源解決方案&#xff0c;其核心功能聚焦于安全性與靈活性。該版本支持私有化部署&#xff0c;允許企業將協作空間嵌入自有服務器并實現品牌定制化&#xff0c;滿足對數據主權和品牌一致性的嚴苛要求。 在安全方面&…

接IT方案編寫(PPT/WORD)、業務架構設計、投標任務

1、IT 方案編寫&#xff08;PPT/WORD&#xff09;? 定制化方案&#xff1a;根據客戶需求&#xff0c;提供涵蓋云計算、大數據、人工智能等前沿技術領域的 PPT/WORD 方案編寫服務&#xff0c;精準提煉核心價值&#xff0c;呈現專業技術內容。? 邏輯清晰架構&#xff1a;采用…

前端面試之變量與數據類型

目錄 一、聲明變量 &#xff08;1&#xff09;let &#xff08;2&#xff09;const &#xff08;3&#xff09;var var、let 和 const 的作用域差異 二、數據類型 &#xff08;1&#xff09;基本類型 undefined和null String 模板字符串拼接&#xff1a; number和b…

python queue

Python中的queue模塊提供了多種隊列實現&#xff0c;主要用于線程間安全通信。以下是主要用法&#xff1a; 基本隊列類型&#xff1a; Queue&#xff1a;先進先出(FIFO)隊列LifoQueue&#xff1a;后進先出(LIFO)隊列&#xff0c;即棧PriorityQueue&#xff1a;優先級隊列 常用方…

Linux驅動:class_create、device_create

udev是什么 動態管理設備文件 傳統的 Linux 系統通過靜態創建 /dev 目錄下的設備文件&#xff08;如早期的 mknod 命令&#xff09;&#xff0c;但現代系統中硬件設備&#xff08;如 USB 設備、存儲設備、串口等&#xff09;熱插拔頻繁&#xff0c;udev 可實時響應設備事件&…

【vLLM 學習】Cpu Offload Lmcache

vLLM 是一款專為大語言模型推理加速而設計的框架&#xff0c;實現了 KV 緩存內存幾乎零浪費&#xff0c;解決了內存管理瓶頸問題。 更多 vLLM 中文文檔及教程可訪問 →https://vllm.hyper.ai/ *在線運行 vLLM 入門教程&#xff1a;零基礎分步指南 源碼 examples/offline_inf…

基于深度強化學習的Scrapy-Redis分布式爬蟲動態調度策略研究

在大數據時代&#xff0c;網絡數據的采集與分析變得至關重要&#xff0c;分布式爬蟲作為高效獲取海量數據的工具&#xff0c;被廣泛應用于各類場景。然而&#xff0c;傳統的爬蟲調度策略在面對復雜多變的網絡環境和動態的抓取需求時&#xff0c;往往存在效率低下、資源浪費等問…

openlayers實現可拖拽的節點(類似知識圖譜)

/** * 本文介紹了實現知識圖譜可視化的技術方案&#xff0c;主要分為兩個圖層實現&#xff1a; * 1、線圖層 不拖動 * 2、點圖層 需要拖動 */ 線圖層 - 負責繪制靜態連接線&#xff0c;使用LineString創建線要素并添加到矢量圖層&#xff1b; // 線圖層 export function add…

酷黑NBA足球賽事直播源碼體育直播M39模板賽事源碼

源碼名稱&#xff1a;NBA足球賽事直播源碼酷黑體育直播M39模板賽事源碼 開發環境&#xff1a;帝國cms7.5 空間支持&#xff1a;phpmysql 帶軟件采集&#xff0c;可以掛著自動采集發布&#xff0c;無需人工操作&#xff01; 演示地址&#xff1a;https://www.52muban.com/shop…

Verilog編程技巧01——如何編寫三段式狀態機

前言 Verilog編程技巧系列文章將聚焦于介紹Verilog的各種編程范式或者說技巧&#xff0c;編程技巧和編程規范有部分重合&#xff0c;但并非完全一樣。規范更注重編碼的格式&#xff0c;像變量命名、縮進、注釋風格等&#xff0c;而編程技巧則更偏重更直觀易讀、更便于維護、綜合…

豆包和deepseek 元寶 百度ai區別是什么

豆包、DeepSeek、元寶和百度 AI 有以下區別&#xff1a; 開發公司 豆包5&#xff1a;由字節跳動公司基于云雀模型開發。DeepSeek4&#xff1a;是深度求索打造的開源多模態大模型。元寶1&#xff1a;是騰訊混元模型的落地產品&#xff0c;整合了 DeepSeek - R1 與混元模型。百…

網頁端 js 讀取發票里的二維碼信息(圖片和PDF格式)

起因 為了實現在報銷流程中&#xff0c;發票不能重用的限制&#xff0c;發票上傳后&#xff0c;希望能讀出發票號&#xff0c;并記錄發票號已用&#xff0c;下次不再可用于報銷。 基于上面的需求&#xff0c;研究了OCR 的方式和讀PDF的方式&#xff0c;實際是可行的&#xff…

讀文獻先讀圖:GO弦圖怎么看?

GO弦圖&#xff08;Gene Ontology Chord Diagram&#xff09;是一種用于展示基因功能富集結果的可視化工具&#xff0c;通過弦狀連接可以更直觀的展示基因與GO term&#xff08;如生物過程、分子功能等&#xff09;之間的關聯。 GO弦圖解讀 ①內圈連線表示基因和生物過程之間的…

pandas隨筆

主要操作兩個對象&#xff1a;一維帶標簽數組 和 二維表格DataFrame 一維帶標簽數組Series pd.Series([1, 3, 5, np.nan, 6, 8]) &#xff0c;結果如下&#xff1a; 可指定索引&#xff0c;pd.Series([1, 3, 5], index[a, b, c]) 二維表格DataFrame 創建時需要指定列名&a…

java教程筆記(十一)-泛型

Java 泛型&#xff08;Generics&#xff09;是 Java 5 引入的重要特性之一&#xff0c;它允許在定義類、接口和方法時使用類型參數。泛型的核心思想是將類型由具體的數據類型推遲到使用時再確定&#xff0c;從而提升代碼的復用性和類型安全性。 1.泛型的基本概念 1. 什么是泛…