【學習筆記】C++每日一記[20240515]

簡述malloc/free與new/delete的區別

malloc/free是C語言提供的庫函數,通過函數調用訪問,需要傳遞參數并接收返回值;而new/delete是C++的運算符,有自己的語法規則和運算方式。

malloc/free函數只能應用于基本類型,而new/delete不但可以應用于基本類型,還可以應用于面向對象的自定義類型。
malloc函數返回的是void*類型,程序需要顯示地轉換成所需要的指針類型;new操作符后面直接指明了類型,不涉及類型轉換問題。

malloc函數只負責申請空間,并返回首地址;new運算符除了申請空間,還會調用構造函數初始化指針指向的內容;free函數只負責釋放空間,并標識這段空間為可用空間;delete運算符除了釋放空間,還會調用對象的析構函數。
事實上,new/delete的功能已經完全覆蓋了malloc/free的功能,之所以C++中保留,是為了解決兼容問題,防止C++中調用含有malloc/free的C函數時出現錯誤。

簡述delete與delete[]的區別

當new[]中的數組元素是基本類型時,通過delete和delete[]都可以釋放數組空間;
當new[]中的數組元素是自定義類型時,只能通過delete[]釋放數組空間。

當數組中的元素是自定義類型時,delete在釋放空間只會調用數組中收割元素的析構函數,而delete[]在釋放空間時會調用數組中所有元素的析構函數。

建議申請和釋放空間采用完全配對的形式:new與delete成對使用,new[]與delete[]成對使用,而delete[]在釋放空間時會調用數組中所有元素的析構函數。

位運算

數據在計算機底層是以二進制的形式存儲的,位運算就是對內存中的二進制位進行操作。
(1)按位與:&,邏輯與操作的規則是有0為0,無0為1;
(2)按位或:|,邏輯與操作的規則是有1為1,無1為0;
(3)按位異或:^,邏輯與操作的規則是相同為0,不同為1;
(4)按位取反:~,1變為0,0變為1;
(5)左移:<<,將一個二進制數按照移位長度逐位向左移動若干位。左移過程中,高位逐漸移除,低位隨之補0;
(6)右移:>>,將一個二進制數按照移位長度逐位向右移動若干位。右移過程中,低位逐漸移除,高位隨之補0;

不使用臨時變量交換兩個數

可以使用位運算來實現不使用臨時變量交換兩個變量的值。具體實現如下:a = a ^ b;
b = a ^ b;
a = a ^ b;

其實是找了個虛擬的基準變量。

首先執行 a = a ^ b; 這一步是將 a 和 b 的值進行異或運算,并將結果賦給 a。異或運算的性質是:相同為0,不同為1。因此,a 的新值實際上是 a 和 b 的各個位不同的部分的組合。

然后執行 b = a ^ b; 這一步是將 a 和 b 的新值(即之前的 a ^ b)與原來的 b 進行異或運算,并將結果賦給 b。這一步的效果是將之前的 a 存儲在了 b 中。

最后執行 a = a ^ b; 這一步是將 a 的新值(即之前的 a ^ b)與 b 進行異或運算,并將結果賦給 a。這一步的效果是將之前的 b 存儲在了 a 中。

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

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

相關文章

.NET使用Microsoft.IdentityModel.Tokens對SAML2.0登錄斷言校驗

如題。使用SAML單點登錄對IDP返回的Response斷言使用微軟提供的Microsoft.IdentityModel.Tokens對斷言&#xff08;Assertion&#xff09;進行校驗。 首先需要安裝Muget包&#xff0c;Microsoft.IdentityModel.Tokens和Microsoft.IdentityModel.Tokens.Saml。 簡易示例代碼如…

手機自養號測評系統:專業應對電商平臺風控,提升賬號穩定性

用手機做自養號測評它具備無限生成不同真實手機底層環境的能力&#xff0c;每個環境都相當于一臺全新的手機設備。通過先進的底層屏蔽技術&#xff0c;我們成功讓亞馬遜等平臺僅能檢測到我們預設的參數&#xff0c;如手機型號、內存、lMEI、序列號、MAC地址以及運營商信息等。每…

Stable Diffusion超詳細教程!本地部署 Stable Diffusion

前言 目前市面上比較權威&#xff0c;并能用于工作中的AI繪畫軟件其實就兩款&#xff1a; Midjourney&#xff08;MJ&#xff09;Stable-Diffusion&#xff08;SD&#xff09; MJ需要付費使用&#xff0c;而SD開源免費&#xff0c;但是上手難度和學習成本略大&#xff0c;并…

變色龍還是樹懶:揭示大型語言模型在知識沖突中的行為

你是知識變色龍還是樹懶?我今天在ICLR學到一個很有趣的術語,叫做證據順序(order of evidence)。 大模型RAG處理知識沖突的探討: 在檢索增強生成(Retrieval-Augmented Generation, RAG)的過程中,技術團隊會將檢索到的前幾名文檔作為證據,并提示(prompt)給大型語言模型(Large La…

電巢直播XR鑒賞|一塊綠幕,閃現進入異星戰爭的現場!

XR場景賞析 在浩瀚的宇宙深處&#xff0c;一顆神秘莫測的異星球映入我們的眼簾&#xff0c;這里&#xff0c;龍卷風與炮火交織&#xff0c;似乎永不停歇。 星球表面散布著無數的飛船殘骸&#xff0c;它們是某場宇宙大戰殘酷的遺存&#xff0c;無聲地訴說著過往的激烈沖突。地面…

LeetCode 3題:無重復字符的最長子串(原創)

【題目描述】 給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長子串的長度。 示例 1: 輸入: s "abcabcbb" 輸出: 3 解釋: 因為無重復字符的最長子串是 "abc"&#xff0c;所以其長度為 3。示例 2: 輸入: s "bbbbb" 輸出…

Dalsa windows10下安裝流程及部分問題分析

文章目錄 安裝及依賴庫說明切換驅動模式流程問題&#xff1a;通過Dalsa SDK開發后找不到相機&#xff1f;問題&#xff1a;找不到采集卡&#xff1f; 安裝及依賴庫說明 官網(https://www.teledynedalsa.com/en/support/downloads-center/)下載的最新文件&#xff08;20240515&…

Leetcode 404:左葉子之和

給定二叉樹的根節點 root &#xff0c;返回所有左葉子之和。 思路&#xff1a;遍歷樹&#xff0c;尋找左葉子節點&#xff1b; 如果判斷是左葉子節點&#xff0c;就更新sum。 public static int sumOfLeftLeaves(TreeNode root){int sum0;sumcompute(root,sum);return sum;}/…

Elasticsearch 8.1官網文檔梳理 - 十四、Query DSL(ES 查詢語法)

Query DSL Elasticsearch 提供了一種基于JSON 的查詢 DSL (Domain Specific Language) 來定義查詢。可以把查詢 DSL 看作是查詢的 AST&#xff08;Abstract Syntax Tree)&#xff0c;由兩種類型的子句組成: 葉子節點查詢&#xff1a; 葉子查詢子句在特定字段中查找特定值&…

Flutter 中的 DrawerHeader 小部件:全面指南

Flutter 中的 DrawerHeader 小部件&#xff1a;全面指南 在 Flutter 的 Drawer 組件中&#xff0c;DrawerHeader 是一個特殊的部件&#xff0c;用于在抽屜的頂部顯示&#xff0c;通常包含應用的標志、用戶信息、標題或其他重要的視覺元素。DrawerHeader 可以作為一個視覺分隔符…

Vue3 報v-bind is missing expression.vue(34)錯誤的解決方案

一、項目環境 node.js 版本&#xff1a;node-v20.11.1-x64 vscode版本&#xff1a;version 1.89 錯誤截圖 二、可能原因解決方案 2.1 v-bind 與 :src之間存在空格 錯誤示例&#xff1a; <img v-bind :src"imgurl" /> 如果有在 :src 前面寫了 v-bind&…

使用Pixi.js 圖片切換特效(圖片分段下滑以及復原)

1.效果: 2.實現原理: 將圖片按寬高切分為x*y(具體可以自己調整)個矩形區域&#xff0c;對每個頂點分配一個隨機值noiseValue(-1到1之間),在頂點著色器中根據這個隨機值而做出不同的y軸位移效果從而實現出分段的下滑或者復原的效果。 3.代碼實現: 首先是頂點著色器的代碼,其中…

C++ lambda表達式詳解

C lambda表達式詳解 C11 lambda表達式精講 [ capture ] ( params ) opt -> ret { body; };capture 是捕獲列表&#xff0c;params 是參數表&#xff0c;opt 是函數選項&#xff0c;ret 是返回值類型&#xff0c;body是函數體 一個完整的 lambda 表達式看起來像這樣&#xf…

醫院污水一體化處理設備有哪些

醫院污水一體化處理設備通常包括以下幾個主要組件&#xff1a; 預處理單元&#xff1a;用于去除污水中的固體懸浮物、顆粒物、油脂等&#xff0c;常見的預處理單元包括格柵、沉砂池、油水分離器等。生物處理單元&#xff1a;用于降解有機物質和去除氮、磷等營養物質。常見的生物…

7D-RESAR性能工程:術語表

文章目錄 1. 前言1.1. 編寫目的1.2. 適應范圍與對象 2. 術語表2.1. RESAR性能工程2.2. 性能測試2.3. 性能項目2.4. 性能項目方案2.5. 性能項目計劃2.6. 性能需求類術語2.6.1. 性能需求/指標2.6.2. 并發用戶2.6.3. 在線用戶2.6.4. 并發度&#xff08;并發率&#xff09;2.6.5. 事…

Kubernetes進階對象Deployment、DaemonSet、Service

Deployment Pod 在 YAML 里使用“containers”就可以任意編排容器&#xff0c;而且還有一個“restartPolicy”字段&#xff0c;默認值就是 Always&#xff0c;可以監控 Pod 里容器的狀態&#xff0c;一旦發生異常&#xff0c;就會自動重啟容器。 不過&#xff0c;“restartPo…

Java小游戲之湯姆貓

背景&#xff1a; 博主寫過羊了個羊小游戲&#xff0c;客戶覺得羊了個羊同學寫過了&#xff0c;想換一個&#xff0c;于是筆者想到了湯姆貓。就是那個以前在蘋果手機上的貓。 過程&#xff1a; 初始會有一個貓的圖片展示&#xff0c;然后你點擊按鈕&#xff0c;貓會有不同動作…

C++進階之路:何為默認構造函數與析構函數(類與對象_中篇)

?? 歡迎大家來訪Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭?&#xff5e;?? &#x1f31f;&#x1f31f; 歡迎各位親愛的讀者&#xff0c;感謝你們抽出寶貴的時間來閱讀我的文章。 我是Srlua小謝&#xff0c;在這里我會分享我的知識和經驗。&am…

Web3與物聯網:構建智能連接的數字世界

引言 隨著互聯網的不斷發展&#xff0c;物聯網&#xff08;Internet of Things, IoT&#xff09;作為一種新興的信息技術&#xff0c;正在逐漸滲透到我們的生活和工作中。而隨著Web3的興起&#xff0c;物聯網將迎來新的發展機遇。本文將探討Web3與物聯網的結合&#xff0c;如何…

如何在職場中構建穩固地位:持續學習、拓展人脈與職業規劃

在日益激烈的職場競爭中&#xff0c;保持一種穩健且前瞻性的狀態是至關重要的&#xff0c;它可以幫助我們在各種“裁員潮”中保持相對安全的位置。以下是一些建議&#xff0c;幫助我們判斷和維持在職場中的安全位置&#xff1a; 首先&#xff0c;持續學習和提升技能是關鍵。職場…