C++指針內存分配與釋放

文章目錄

  • 指針分配與釋放 :C++ new/delete VS C malloc/free
    • C++ new/delete
    • C malloc/free
  • 指針銷毀
  • 智能指針

指針分配與釋放 :C++ new/delete VS C malloc/free

new:分配內存、調用類的構造函數。delete:調用類的析構函數和釋放內存(先調用對象的析構函數,然后利用全局的operator delete(一般通過std::free實現)函數釋放內存,并不會將指針自動置空。
mallocfree只是分配和釋放內存。

new建立的是一個對象,而malloc分配的是一塊內存
new建立的對象可以用成員函數訪問不要直接訪問它的地址空間malloc分配的是一塊內存區域,用指針訪問,可以在里面移動指針
new出來的指針是帶有類型信息的,而malloc返回的是void指針。

C++ new/delete

/* new & delete */
Obj *a = new Obj;
//...
delete a;

C malloc/free

/* malloc & free */
Obj *a = (Obj*)malloc(sizeof(obj));
a->Intialize();
// ...
a->Destroy();
free(a);

malloc/free不能執行構造與析構函數,必須調用成員函數Initialize和Destroy來完成初始化與清除工作。

指針銷毀

if (p != NULL)
{delete p;  // 僅刪除p中內容,p不為空p == NULL;  // 指針設為空,防止二次delete崩潰
}

int* ,char* 等只要不是new的,不用釋放,系統會自動把他們占的內存釋放掉,只有new的才會手動的去delete。局部變量,存在于棧上,比如int *p;p在棧上,而且p的值也是棧的一個地址
但是當int *p = new int ;這時候,p這個變量是在棧上的。但是p的值是一個地址,這個地址是堆上的一個地址。如果不delete p;那么,這個地址會一直被占用著,不能被其他的對象所使用。
因此棧的空間會自動釋放,而堆里的空間必須手動釋放。

智能指針

:指針自動銷毀
unique_ptr
shared_ptr
intrusive_ptr

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

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

相關文章

【CSS in Depth 2 精譯】2.4 視口的相對單位

當前內容所在位置 第一章 層疊、優先級與繼承第二章 相對單位 2.1 相對單位的威力2.2 em 與 rem2.3 告別像素思維2.4 視口的相對單位 ??2.5 無單位的數值與行高2.6 自定義屬性2.7 本章小結 2.4 視口的相對單位 前面介紹過的 em 和 rem 是相對于 font-size 定義的&#xff0…

rust + mingw安裝教程

0. 說明 windows上安裝rust時,需要在電腦上安裝C/C構建工具。推薦的的兩種工具鏈可以選擇: visual studio build toolsmingw 官方推薦使用visual studio,若你的電腦上已經安裝了visual studio,則無需再安裝,直接安裝…

nodejs md文件轉html

const marked require(marked);// 要轉換的 Markdown 文本 const markdownText # Hello, Markdown!This is a paragraph.- List item 1 - List item 2 ;// 使用 marked 將 Markdown 轉換為 HTML const html marked(markdownText);console.log(html);我直接讀取md文件轉換結…

單目相機減速帶檢測以及測距

單目相機減速帶檢測以及測距項目是一個計算機視覺領域的應用,旨在使用一個攝像頭(單目相機)來識別道路上的減速帶,并進一步估計車輛與減速帶之間的距離。這樣的系統對于智能駕駛輔助系統(ADAS)特別有用&…

基于tensorflow2的目標檢測完整實現過程

序言 雖然tf1仍然在維護,但tf2畢竟是主流,如果不是項目有明確要求,建議直接選擇tf2。本文以tf2為例展開,總結從環境準備到使用自己的數據和tensorflow預訓練模型進行快速訓練和調用。對tensorflow和目標檢測算法有深入了解的&…

C++ 的常見算法 之二

C 的常見算法 之二 劃分序列partitionstable_partition 排序sortnth_element 二分查找binary_search 劃分序列 partition 重新排列 [first,last) 范圍內的元素,使得 pred 返回 true 的所有元素先于所有返回 false 的元素。迭代器返回指向第二組的第一個元素的點。…

Python開發——Python 線程入門

An Intro to Threading in Python – Real Python 1. 什么是線程? 線程是一個獨立的執行流程。這意味著您的程序將有兩件事情同時發生。但對于大多數 Python 3 實現來說,不同的線程實際上并不是同時執行的:它們只是看起來是這樣。 人…

Vue3中的jsx的babel配置

如果我們希望在項目中使用jsx,那么我們需要添加對jsx的支持: jsx我們通常會通過Babel來進行轉換(React編寫的jsx就是通過babel轉換的);對于Vue來說,我們只需要在Babel中配置對應的插件即可; *…

Vue+Xterm.js+WebSocket+JSch實現Web Shell終端

一、需求 在系統中使用Web Shell連接集群的登錄節點 二、實現 前端使用Vue&#xff0c;WebSocket實現前后端通信&#xff0c;后端使用JSch ssh通訊包。 1. 前端核心代碼 <template><div class"shell-container"><div id"shell"/>&l…

C++ 實現字符串逆序

C 實現字符串逆序 思路&#xff1a; 輸入一個字符串。使用雙指針法&#xff0c;交換字符串的首尾字符&#xff0c;逐步向中間移動。輸出逆序后的字符串。 #include <iostream> #include <string>using namespace std;void reverseString(string &str) {int …

【FPGA】STA靜態時序分析

文章目錄 一.定義二.分類1. 靜態時序分析2. 靜態時序分析 三. 概念四. 時間余量1.場景2.建立時間余量3.保持時間余量 一.定義 時序分析:檢查電路是否滿足時序要求&#xff1b; 二.分類 1. 靜態時序分析 STA,遍歷所有的時序路徑&#xff0c;根據時序庫&#xff08;.lib文件&…

【Mojolicious RESTful接口全解】構建現代化Web服務的秘訣

標題&#xff1a;【Mojolicious RESTful接口全解】構建現代化Web服務的秘訣 Mojolicious是一個基于Perl的高性能、實時的Web框架&#xff0c;它以其簡潔的語法和強大的功能而聞名。Mojolicious不僅支持傳統的Web應用開發&#xff0c;還特別適合構建RESTful API。本文將詳細介紹…

新手教學系列——使用uWSGI對Flask應用提速

在構建和部署Flask應用時,性能和穩定性是兩個關鍵的因素。為了提升Flask應用的性能,我們可以借助uWSGI這個強大的工具。本文將詳細介紹為什么要使用uWSGI、uWSGI的底層原理,并提供一個實例配置,幫助你更好地理解和應用這個工具。 為什么要使用uWSGI uWSGI 是一個應用服務…

探索企業知識邊界,鴻翼ECM AI助手開啟智慧問答新時代

在信息化迅速發展的當下&#xff0c;企業積累的數字文檔數量巨大&#xff0c;這些文檔中蘊含的深層信息對業務發展至關重要。然而&#xff0c;傳統的搜索技術常常因只能進行關鍵字查詢而無法滿足對文檔深層次理解的需求。 據Gartner調查&#xff0c;高達47%的員工在尋找有效工…

Webpack: 三種Chunk產物的打包邏輯

概述 在前文 Webpack: Dependency Graph 管理模塊間依賴 中&#xff0c;我們已經詳細講解了「構建」階段如何從 Entry 開始逐步遞歸讀入、解析模塊內容&#xff0c;并最終構建出模塊依賴關系圖 —— ModuleGraph 對象。本文我們繼續往下&#xff0c;講解在接下來的「封裝」階段…

【大數據】—美國交通事故分析(2016 年 2 月至 2020 年 12 月)

引言 在當今快速發展的數字時代&#xff0c;大數據已成為我們理解世界、做出決策的重要工具。特別是在交通安全領域&#xff0c;大數據分析能夠揭示事故模式、識別風險因素&#xff0c;并幫助制定預防措施&#xff0c;從而挽救生命。本文將深入探討2016年2月至2020年12月期間&…

【redis】 LRU 和 LFU 算法

1、簡介 Redis 中的 LRU&#xff08;Least Recently Used&#xff09;和 LFU&#xff08;Least Frequently Used&#xff09;算法是用于決定在內存空間不足時&#xff0c;哪些鍵&#xff08;key&#xff09;應該被刪除以釋放空間的策略。這兩種算法都試圖通過跟蹤鍵的使用情況…

解決Memcached內存碎片:優化緩存性能的策略

解決Memcached內存碎片&#xff1a;優化緩存性能的策略 Memcached是一個廣泛使用的高性能分布式內存緩存系統&#xff0c;它通過在內存中緩存數據來加速數據檢索操作。然而&#xff0c;隨著時間的推移和緩存操作的進行&#xff0c;Memcached可能會遇到內存碎片問題&#xff0c…

24年河南特崗教師招聘流程+報名流程

河南特崗教師報名流程如下 1.登錄河南省特崗招聘網 登錄河南省特崗招聘網注冊賬號和密碼&#xff0c;賬號可以是手機號或者身份證號&#xff0c;密碼自己設置 2.注冊登錄賬號 注冊完賬號重新登錄賬號&#xff0c;輸入身份證號、手機號、密碼、驗證碼 3.瀏覽考試須知 填寫個人信…