国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete

這篇具有很好參考價值的文章主要介紹了【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

創(chuàng)作不易,本篇文章如果幫助到了你,還請點贊 關(guān)注支持一下?>??<)!!
主頁專欄有更多知識,如有疑問歡迎大家指正討論,共同進步!
??c++系列專欄:C/C++零基礎(chǔ)到精通 ??

給大家跳段街舞感謝支持!? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete

c語言內(nèi)容??:

專欄:c語言之路重點知識整合

【c語言】全部知識點總結(jié)


一、c語言動態(tài)申請內(nèi)存空間

c語言堆區(qū)malloc相關(guān)知識點:【c語言】五大內(nèi)存區(qū)域 | 堆區(qū)詳解

使用malloc將堆區(qū)創(chuàng)建一個存儲空間并把局部變量存放進去,該數(shù)據(jù)如果不被手動回收,就會一直存放在堆區(qū)中。

釋放完后將指針p賦值為NULL,避免野指針的出現(xiàn)

	int* p = (int*)malloc(sizeof(int));
	//...........
	free(p);
	p = NULL;

在C++中,有一種全新的方式用來在堆區(qū)動態(tài)申請內(nèi)存空間——newdelete關(guān)鍵字

【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete

二、new-delete

使用new關(guān)鍵字動態(tài)在堆區(qū)申請內(nèi)存空間,new關(guān)鍵字后 放 類型,返回的是對應(yīng)類型的地址!!!

格式:new關(guān)鍵字 后加上類型名,在堆區(qū)申請該類型空間大小的空間

代替c語言中的malloc 還不用進行強轉(zhuǎn)

例如:

	int* p1 = new int;
	*p1 = 1;
	cout << *p1 << endl;

使用delete代替c語言中的free釋放空間

但是delete不是函數(shù),關(guān)鍵字后直接加上要釋放空間的指針地址,仍然將指針p賦值為NULL:

	int* p1 = new int;
	*p1 = 1;
	cout << *p1 << endl;

	delete p1;
	p1 = NULL;

基本數(shù)據(jù)

在int類型后加(),可以賦予初始值

int* p2 = new int(7);
	cout << *p2 << endl;

	delete p2;
	p2 = NULL;

如果未指定初始值,則初始值為0:

int* p3 = new int();
	cout << *p3 << endl;

	delete p3;
	p3 = NULL;

【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete

數(shù)組

申請一個int型數(shù)組的堆區(qū)空間:

	int* p4 = new int[3];

同樣可以賦予初始值:

	int* p4 = new int[3] {1,2,3};
	for (int i = 0; i < 3; i++)
	{
		cout << p4[i] << " ";
	}

與基本數(shù)據(jù)類型不同的是:在delete數(shù)組的時候,需要在指針前加[]用來代表數(shù)組,二維數(shù)組同樣

中括號[]放在前面,代表整個數(shù)組

例如:

	delete []p4;
	p4 = NULL;

【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete

注:

delete回收空間并不包含指針本身,而是指針指向的內(nèi)存空間,同一塊內(nèi)存空間不要重復釋放,除非指針已經(jīng)被賦空,對空指針使用delete是安全的。
對棧區(qū)的內(nèi)存空間不能使用delete來釋放!

三、new指針、new數(shù)組

只需要牢記:

使用new關(guān)鍵字動態(tài)在堆區(qū)申請內(nèi)存空間,new關(guān)鍵字后 放 類型,返回的是對應(yīng)類型的地址!!!

就兩種情況

  • new指針——
  • new數(shù)組——

1.new 整型指針

整型指針對應(yīng)的地址:二級指針,因此為int ** p1

	int** p1 = new int*;
	delete p1;
	p1 = NULL;

2.new 指針數(shù)組

指針數(shù)組相關(guān)知識點:【c語言】指針數(shù)組

指針數(shù)組對應(yīng)的地址也是二級指針,因此為int ** p2

	int** p2 = new int* [3];
	delete []p2;
	p2 = NULL;

3.new 數(shù)組指針

數(shù)組指針相關(guān)知識點:【c語言】數(shù)組指針

數(shù)組指針int(*p3)[3]的指針 在類型上再加*int(**p3)[3]

int(**p3)[3] = new (int(*)[3]);
	delete p3;
	p3 = NULL;

4.new 整型的二維數(shù)組

指向二維數(shù)組的指針為:一維數(shù)組指針int(*p4)[3]

	int(*p4)[3] = new int[2][3];
	delete[]p4;
	p4 = NULL;

5.new 函數(shù)指針

先隨便定義一個函數(shù):

void fun(int a)
{
	cout << "TianXi Studio" << endl;
}

指向函數(shù)指針的地址:在函數(shù)指針void(*p5)(int)基礎(chǔ)上加*void(**p5)(int)

	void(**p5)(int) = new (void (*)(int));
	delete p5;
	p5 = NULL;

總結(jié)

malloc-free和new-delete的區(qū)別

  • new、delete是關(guān)鍵字,需要C++的編譯器支持,malloc()、free() 是函數(shù),需要頭文件支持

  • new申請空間不需要指定申請大小,根據(jù)類型自動計算,new返回的是申請類型的地址,不需要強轉(zhuǎn),malloc()需要顯式的指定申請空間的大小(字節(jié)),返回void* ,需要強轉(zhuǎn)成我們需要的類型。

  • new申請空間的同時可以設(shè)置初始化,而malloc 需要手動賦值

  • malloc()free() 則不會調(diào)用構(gòu)造、析構(gòu)函數(shù)

【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete


在C語言中,常用的動態(tài)申請內(nèi)存空間的函數(shù)是malloc、callocrealloc,并且需要手動free釋放已分配的內(nèi)存空間

而在C++中,可以使用new操作符來動態(tài)創(chuàng)建一個對象或一段對象數(shù)組

new可以自動調(diào)用構(gòu)造函數(shù)初始化對象,而delete操作符則會自動調(diào)用析構(gòu)函數(shù),釋放分配的內(nèi)存空間(后面會提到)

使用delete釋放動態(tài)分配的對象數(shù)組時記得加上方括號,否則只會釋放首個元素并不會將整個數(shù)組的內(nèi)存空間都釋放掉。


【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete文章來源地址http://www.zghlxwxcb.cn/news/detail-470620.html

大家的點贊、收藏、關(guān)注將是我更新的最大動力! 歡迎留言或私信建議或問題。
大家的支持和反饋對我來說意義重大,我會繼續(xù)不斷努力提供有價值的內(nèi)容!如果本文哪里有錯誤的地方還請大家多多指出(●'?'●)

到了這里,關(guān)于【C/C++】基礎(chǔ)知識之動態(tài)申請內(nèi)存空間new-delete的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • C語言基礎(chǔ)知識:內(nèi)存分配

    目錄 內(nèi)存分配原理 內(nèi)存分配方法 靜態(tài)內(nèi)存分配 動態(tài)內(nèi)存分配 MALLOC() CALLOC()/

    2024年02月07日
    瀏覽(35)
  • 【cuda】二、基礎(chǔ)知識: 內(nèi)存管理 同步

    在CUDA中,使用** cudaMalloc() 來分配設(shè)備內(nèi)存,使用 cudaFree() **來釋放設(shè)備內(nèi)存。 cudaMallocManaged 統(tǒng)一內(nèi)存管理 **統(tǒng)一虛擬尋址(Unified Memory): 使用 cudaMallocManaged() **來分配可以在CPU和GPU之間共享的內(nèi)存。無需關(guān)心數(shù)據(jù)在主機或設(shè)備上。 cudaMallocManaged 是一個CUDA運行時應(yīng)用程序接

    2024年01月18日
    瀏覽(20)
  • C++基礎(chǔ)知識 (命名空間、輸入輸出、函數(shù)的缺省參數(shù)、函數(shù)重載)

    C++基礎(chǔ)知識 (命名空間、輸入輸出、函數(shù)的缺省參數(shù)、函數(shù)重載)

    ?? 例1: #include iostream 標準輸入輸出 std 是 c++ 標準庫的命名空間,將標準庫的定義實現(xiàn)都放到這個命名空間中 using namespace std 展開 std 里的內(nèi)容 cout ? c 代表的是 console 控制臺的意思, out 有輸出的意思 流運算符 流插入 endl 等價于 \\\'n\\\' 在 c++ 中,變量、函數(shù)和類的名稱存在于

    2024年02月15日
    瀏覽(48)
  • 操作系統(tǒng)基礎(chǔ)知識介紹之內(nèi)存層次結(jié)構(gòu)(一)

    操作系統(tǒng)基礎(chǔ)知識介紹之內(nèi)存層次結(jié)構(gòu)(一)

    傳統(tǒng)上,內(nèi)存層次結(jié)構(gòu)的設(shè)計者專注于優(yōu)化平均內(nèi)存訪問時間,這由緩存訪問時間、未命中率和未命中懲罰決定。 然而,最近,功率已成為主要考慮因素。 在高端微處理器中,可能有 60 MiB 或更多的片上高速緩存,并且大型二級或三級高速緩存將消耗大量功率。 這個問題在

    2024年02月04日
    瀏覽(22)
  • JVM基礎(chǔ)知識(內(nèi)存區(qū)域劃分,類加載,GC垃圾回收)

    JVM基礎(chǔ)知識(內(nèi)存區(qū)域劃分,類加載,GC垃圾回收)

    目錄 內(nèi)存區(qū)域劃分 JVM中的棧 JVM中的堆 程序計數(shù)器 方法區(qū)(元數(shù)據(jù)區(qū)) 給一段代碼,某個變量在哪個區(qū)域上? 類加載 類加載時機 雙親委派模型 GC 垃圾回收機制 GC 實際工作過程 1.找到垃圾/判定垃圾 1.可達性分析(Java中的做法) 2.引用計數(shù) 2.清理垃圾 1.標記清除 2.復制算法 3.標記整

    2024年02月07日
    瀏覽(28)
  • 知識儲備--基礎(chǔ)算法篇-動態(tài)規(guī)劃

    知識儲備--基礎(chǔ)算法篇-動態(tài)規(guī)劃

    第一次接觸動態(tài)規(guī)劃,不知道具體什么意思,做了題才發(fā)現(xiàn)動態(tài)規(guī)劃就是把大問題變成小問題,并解決了小問題重復計算的方法稱為動態(tài)規(guī)劃。比如上樓梯,一次上一階或二階,求有多少種算法,就可以拆成最后一階的方法數(shù)等于前一階的方法數(shù)加前兩階的方法數(shù),這就是遞

    2024年02月11日
    瀏覽(22)
  • 程序員基礎(chǔ)的硬件知識(cpu、主板、顯卡、內(nèi)存條等)

    程序員基礎(chǔ)的硬件知識(cpu、主板、顯卡、內(nèi)存條等)

    一、綜合簡介 cpu: 負責運算數(shù)據(jù),就等于你的大腦運算速度。 顯卡: 本來沒有顯卡,后來因為大家對圖片要求越來越高,視頻要求越來越高,啥都讓cpu算太累了,于是分出來一個,專門用來計算圖片數(shù)據(jù)的,叫做顯卡。 內(nèi)存條: 相當于人的口袋,你出門時(開機時),能

    2024年02月01日
    瀏覽(27)
  • 《Vite 基礎(chǔ)知識》使用 Glob 動態(tài)加載 .vue 文件

    開發(fā)基于 Vite + Vue3 的組件庫,多個 .vue 文件需要動態(tài)加載! 注意 import.meta.globEager 已經(jīng)棄用,請使用 import.meta.glob 來代替! 代碼第 1 行,注意使用兩個 **,匹配當前目錄及其嵌套的全部子目錄下的文件; 代碼第 4 行,異步使用 Promise 加載,所以要在 then 中獲取真正的組件對

    2024年01月18日
    瀏覽(19)
  • 操作系統(tǒng)基礎(chǔ)知識介紹之內(nèi)存技術(shù)和優(yōu)化(一)(包含SRAM和DRAM、SDRAM、GDRAMs)

    操作系統(tǒng)基礎(chǔ)知識介紹之內(nèi)存技術(shù)和優(yōu)化(一)(包含SRAM和DRAM、SDRAM、GDRAMs)

    使用 SRAM 可以滿足最小化高速緩存訪??問時間的需要。 然而,當緩存未命中時,我們需要盡快將數(shù)據(jù)從主存中移出,這就需要高帶寬內(nèi)存。 這種高內(nèi)存帶寬可以通過將構(gòu)成主內(nèi)存的許多 DRAM 芯片組織成多個內(nèi)存條并使內(nèi)存總線更寬來實現(xiàn),或者兩者兼而有之。 高帶寬內(nèi)存

    2024年02月04日
    瀏覽(16)
  • 計算機體系結(jié)構(gòu)基礎(chǔ)知識介紹之緩存性能的十大進階優(yōu)化之編譯器控制的預(yù)取和利用HBM擴展內(nèi)存層次(七)

    計算機體系結(jié)構(gòu)基礎(chǔ)知識介紹之緩存性能的十大進階優(yōu)化之編譯器控制的預(yù)取和利用HBM擴展內(nèi)存層次(七)

    硬件預(yù)取的替代方案是編譯器在處理器需要數(shù)據(jù)之前插入預(yù)取指令來請求數(shù)據(jù)。 預(yù)取有兩種類型: ■ 寄存器預(yù)取將值加載到寄存器中。 ■ 高速緩存預(yù)取僅將數(shù)據(jù)加載到高速緩存。 這兩種類型都可以分為有錯或無錯的,即預(yù)取的地址是否會導致虛擬地址錯誤或保護錯誤的異

    2024年02月13日
    瀏覽(30)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包