c++系列之特殊類的設計

在這里插入圖片描述

💗 💗 博客:小怡同學
💗 💗 個人簡介:編程小萌新
💗 💗 如果博客對大家有用的話,請點贊關注再收藏

🌞

僅在堆上創建對象的類

將類的構造函數,拷貝構造私有,防止在棧上生成對象
提供靜態成員函數,該靜態成員函數中完成堆對象的創建,用類名::函數的方式調用該函數
目的是返回一個在堆上生成的對象


class HeapOnly
{
private:HeapOnly(){}HeapOnly(const HeapOnly& h) = delete;HeapOnly& operator=(const HeapOnly&) = delete;//防止拷貝
public:static HeapOnly* GetHeapOnly(){return new HeapOnly;}
};

僅在棧上創建對象的類

將類的構造函數私有防止在堆上生成對象
提供靜態成員函數,該靜態成員函數中完成堆對象的創建,用類名::函數的方式調用該函數
目的是返回一個在棧上生成的對象
注意:不能拷貝函數=delete因為該靜態函數返回的是值拷貝需要調用拷貝構造

class StackOnly
{
private:StackOnly(){}void* operator new(size_t size) = delete;public:
//不能引用是因為st出棧后會被銷毀static StackOnly GetStackOnly(){StackOnly st;return st;}
};

設計不能被繼承的類

將基類用final關鍵字標志

 class test final
{
private:test(const test& v) = delete;test& operator=(const test& v) = delete;
public:int _a;test(int a):_a(a){}
};

設計單例對象

單例模式

一個類只能創建一個對象,即單例模式,該模式可以保證系統中該類只有一個實例,并提供一個訪問它的全局訪問點,該實例被所有程序模塊共享。
//單例模式有兩種情況
餓漢模式:
是說不管你將來用不用,程序啟動時就創建一個唯一的實例對象
懶漢模式:
例對象構造十分耗時或者占用很多資源所以
懶漢模式延遲加載的方式更好
//單例模式的特定就是 構造函數私有 調用靜態成員函數返回靜態或者全局的變量/指針

餓漢模式

namespace hunry
{class Single{private:static Single tmp;Single(){}public:static Single GetInstance(){return tmp;}};
}

懶漢模式

namespace lazy
{class Single{private:static Single* tmp;Single(){}public://因為需要顯示調用析構函數所以設置這個類static Single* GetInstance(){if (tmp == nullptr)return tmp = new Single;elsereturn tmp;}static Single Destory(){if (tmp == nullptr){delete tmp;tmp = nullptr;}}};Single* Single::tmp = nullptr;
}

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

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

相關文章

SpringBoot的國際化

國際化(internationalization)是設計容易適應不同區域要求的產品的一種方式。它要求從產品中抽離所有地域語言元素。換言之,應用程序的功能和代碼設計考慮了在不同地區運行的需要。開發這樣的程序的過程,就稱為國際化。 那么當我…

prometheus+grafana+Linux監控

prometheusgrafanaLinux監控 環境說明 操作前提: 先去搭建Docker部署prometheusgrafana...這篇文章的系統 Docker部署prometheusgrafana...的參考文章: Docker部署prometheusgrafana…-CSDN博客 Linux部署docker參考文章: 02-Docker安裝_doc…

文檔處理控件Aspose.Words教程:在.NET中將多頁文檔轉換為單個圖像

在Aspose.Words for .NET 25.6版本中,我們引入了一項新功能,允許您將多頁文檔導出為單個光柵圖像。當您需要將文檔作為單個可視文件共享或顯示時,此功能非常有用。 Aspose.Words for .NET 25.6 的新功能 在 25.6 版之前,將多頁文…

vuex4.0用法

VUEX 狀態管理,多個組件有共享數據的時候,就叫狀態管理 什么情況下會用到vuex , 如果你不知道vuex的情況也能完成你的需求,就說你的項目中不需要用到狀態管理。 組件層級比較復雜的時候,還是用組件傳值的方式來傳值,…

2025.6.24總結

今天發生了兩件事,這每件事情都足以影響我的工作狀態。 1.團隊中有人要轉崗 這算是最讓我有些小震驚的事件了。我不明白,那個同事干得好好的,為啥會轉崗,為啥會被調到其他團隊。雖然團隊有正編,有od,但我自始自終覺得…

狀態模式詳解

概述 結構設計類似責任鏈模式,但是在各個狀態進行遍歷的過程中,更注重的是條件的判斷,只有符合條件的狀態才能正常匹配進行處理。條件不成功的會立即切換到下一個狀態。 有限狀態機 狀態機一般指的是有限狀態機(FSM&#xff1a…

Lua 調試(Debug)

Lua 調試(Debug) 引言 Lua 是一種輕量級的編程語言,廣泛應用于游戲開發、嵌入式系統、腳本編寫等領域。在 Lua 開發過程中,調試是確保程序正確運行的重要環節。本文將詳細介紹 Lua 調試的基本方法、常用工具以及調試技巧,幫助開發者提高編程…

Windows安裝Emscripten?/emsdk(成功)

安裝git安裝python 不要自行下載版本,先卸載其他版本的python。 使用管理員打開cmd,輸入python3,直接跳轉到應用商店,安裝即可。 為什么一定要這么安裝?好像是跟路徑有關。 下載emsdk git clone https://github.c…

AI網頁部署在本地_windows

用bolt.new寫了一個網頁,下載ZIP至本地 以下是在 Windows 上本地運行你用 Node.js 搭建的網頁服務,并在瀏覽器中訪問的常見流程: 1、安裝 Node.js 訪問官網 Node.js — Run JavaScript Everywhere ,下載適合 Windows 的 LTS 版本…

Linux sudo命令

sudo是一個常用的Linux命令,用于以超級用戶的權限執行命令。下面是對sudo命令的介紹: sudo命令的作用: sudo允許普通用戶以超級用戶(root)的身份執行特定命令或訪問特定文件。它提供了一種安全且可控制的方式&#xf…

郵件合并----批量從excel表中導出數據到word中

文章目錄 前言一、操作流程1. 打開word,開始郵件合并->郵件合并分布向導2. 開始郵件合并,一共6步3. 選擇全部,點擊確認,即可生成Excel表中244條記錄,也就是244頁。 總結 前言 涉及到將學生的姓名、學號、檔案編號、…

活動安排貪心算法

輸入說明 n??????—— 活動數量 s[1…n]??— 第 i 個活動的開始時間 (start) f[1…n]??— 第 i 個活動的結束時間 (finish) 前置要求:數組已按 f 從小到大排好序 (若沒排,先調用 sortByFinishTime(),復雜度 O(n log …

Mysql8啟用日志審計插件

概述 等保要求,數據庫啟用日志審計。Mysql8上面使用開源插件audit-plugin-for-mysql(MariaDB的審計插件不用折騰了,無論直接使用還是編譯使用,在Mysql8上都不行) 插件下載 日志審計插件下載地址: https:…

機器學習-線性模型

目錄 線性模型 1、線性回歸: 2、對數幾率回歸: 3、線性判別分析: 4、多分類學習: 5、類別不平衡問題: 基本數理知識補充: 損失函數: 凹凸函數 梯度下降 線性模型 線性模型形式簡單、易…

Git上傳代碼如何解決Merge沖突

示例 解決方案 1、第一步切到本地的主分支 git checkout master2、拉取線上最新的代碼 git pull3、切到本地自己的分支 gco feat-xx4、將代碼從master變基&#xff08;移動/合并&#xff09;過來 git rebase master5、手動解決沖突 <<<<<<< HEAD 本…

fluentd + elasticsearch + grafana 不能顯示問題

fluentd中配置log 源文件后&#xff0c;再配置elasticsearch后&#xff0c; elasticsearch pod中查詢日志記錄正常。 修改log 文件 后&#xff0c; elasticsearch pod中查詢日志記錄更新也正常。 但是在grafana中添加elasticsearch data source后&#xff0c; 連接正常&#…

《分布式事務新形態:AT模式如何被Seata TCC擊穿》的深度解析,包含AT死鎖原理/TCC原子性保障/Service Mesh深度集成三大硬核模塊

一、AT模式的死刑判決&#xff1a;全局鎖引發的血案 1.1 死鎖現場還原&#xff08;支付寶真實案例&#xff09; 1.2 全局鎖原理與缺陷 二、TCC模式的絕地反擊&#xff1a;原子性保障三板斧 2.1 TCC核心架構設計 2.2 冪等控制原子防護網 三、Service Mesh深度集成&#xf…

【Elasticsearch】es初識,在項目架構中的用途,與mysql和kafka的配合使用,

ES是一個開源的高擴展的分布式全文檢索引擎 在項目已有mysql增刪改查的情況下&#xff0c;新增kafka&#xff0c;es流程 用戶新增/修改商家&#xff08;寫MySQL&#xff09; ↓ Kafka 生產者發送商家數據消息 ↓ Kafka 消費者監聽消息 → 寫入 Elasticsearch ↓ 前端搜索商家時…

【DataWhale組隊學習】AI辦公實踐與應用-數據分析

AI辦公&#xff1a;數據分析 1. 使用大模型進行數據分析的常見流程 把數據扔給AI讓AI自動分析&#xff0c;并告訴你結果 下面我們對上面兩個步驟進行詳細說明 2. 使用大模型進行數據分析 2.1 將數據扔給大模型 2.1.1 選擇合適的辦公大模型 要使用大模型進行數據分析時&a…

5G 浪潮:發展全景、困境突圍與未來航向

在當今數字化浪潮中&#xff0c;5G 技術宛如一顆璀璨的明星&#xff0c;照亮了各個行業前行的道路。自 5G 正式商用以來&#xff0c;它不僅深刻改變了人們的生活方式&#xff0c;更在工業、農業、交通等領域掀起了一場數字化轉型的革命。本文將深入探討 5G 技術的原理、發展現狀…