亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++內(nèi)存管理詳解使用方式

 更新時間:2022年04月24日 15:46:38   作者:一起慢慢變強  
內(nèi)存管理是C++最令人切齒痛恨的問題,也是C++最有爭議的問題,C++高手從中獲得了更好的性能更大的自由,C++菜鳥的收獲則是一遍—遍的檢查代碼和對C++的痛恨,但內(nèi)存管理在C++中無處不在,內(nèi)存泄漏幾乎在每個C++程序中都會發(fā)生,要想成為C++高手,內(nèi)存管理這關(guān)是必須過的

c++中內(nèi)存管理的方式

在c語言中,我們擁有malloc和free等函數(shù)可以對內(nèi)存進(jìn)行動態(tài)管理

但是總體來說不是很方便,所以c++擁有了一種新的方式來對內(nèi)存進(jìn)行管理:通過new和delete操作符來對內(nèi)存進(jìn)行動態(tài)分配

new和delete操作符的使用方式

new操作符的使用方式:

#include<iostream>
using namespace std;
class A
{};
 
int main()
{
	int* p = new int(2);	//動態(tài)分配一個int類型的空間,還可以將它初始化
	int* p1 = new int[10];	//動態(tài)分配一個數(shù)組
	A* p2 = new A;	//動態(tài)分配一個類
	return 0;
}

delete操作符的使用方式:

#include<iostream>
using namespace std;
class A
{};
int main()
{
	int* p = new int(2);
	int* p1 = new int[10];	
	A* p2 = new A;	
	delete p;	//銷毀p
	delete[] p1;	//銷毀p1
	delete p2;	//銷毀p2
	return 0;
}

注意:

1、對于自定義類型,new和delete會自動調(diào)用構(gòu)造函數(shù)和析構(gòu)函數(shù)對創(chuàng)建出的對象進(jìn)行初始化,也可以顯示的寫出想要被初始化的值,而malloc和free不會

#include<iostream>
using namespace std;
class A
{
public:
	A(int x = 1) :_x(x) {}
private:
	int _x;
};
int main()
{
	A* p = new A(2);	//()括號內(nèi)為顯示的給對象初始化的值
	return 0;
}

2、假如要銷毀數(shù)組類的內(nèi)容,最好使用[]來修飾一下,因為雖然對于內(nèi)置類型不會報錯,但是自定義類型會直接報錯

operator new和operator delete函數(shù)

new和delete是用戶進(jìn)行動態(tài)內(nèi)存申請和釋放的操作符

operator new 和operator delete是系統(tǒng)提供的全局函數(shù)

new在底層調(diào)用operator new全局函數(shù)來申請空間

delete在底層通過operator delete全局函數(shù)來釋放空間

最終還是通過malloc和free來進(jìn)行動態(tài)內(nèi)存分配,不過和c不同的是,c++空間申請失敗,會出現(xiàn)拋異常的情況,而不是返回NULL

new和delete的原理內(nèi)部實現(xiàn)

內(nèi)置類型

如果申請的是內(nèi)置類型的空間,new和malloc,delete和free基本類似,不同的地方是:new/delete申請和釋放的是單個元素的空間,new[]和delete[]申請的是連續(xù)空間,而且new在申請空間失敗時會拋異常,malloc會返回NULL

自定義類型

如果是自定義類型,就有很大區(qū)別了

new的原理

1、調(diào)用operator new申請空間,

2、調(diào)用構(gòu)造自定義類型的構(gòu)造函數(shù)進(jìn)行初始化

delete的原理

1、調(diào)用operator delete釋放空間

2、調(diào)用自定義類型的析構(gòu)函數(shù)進(jìn)行初始化

所以我們使用c++的時候最好使用new和delete進(jìn)行動態(tài)內(nèi)存開辟,因為這樣可以更方便進(jìn)動態(tài)內(nèi)存管理,防止內(nèi)存泄露

到此這篇關(guān)于C++內(nèi)存管理詳解使用方式的文章就介紹到這了,更多相關(guān)C++內(nèi)存管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MFC實現(xiàn)連連看游戲之消子算法

    MFC實現(xiàn)連連看游戲之消子算法

    這篇文章主要為大家詳細(xì)介紹了MFC實現(xiàn)連連看游戲之消子算法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • C語言strlen函數(shù)全方位講解

    C語言strlen函數(shù)全方位講解

    在C語言中我們要獲取字符串的長度,可以使用strlen函數(shù),strlen函數(shù)計算字符串的長度時,直到空結(jié)束字符,但不包括空結(jié)束字符,因為 strlen函數(shù)時不包含最后的結(jié)束字符的,因此一般使用strlen函數(shù)計算的字符串的長度會比使用sizeof計算的字符串的字節(jié)數(shù)要小
    2022-09-09
  • C++實現(xiàn)一個簡單的線程池的示例代碼

    C++實現(xiàn)一個簡單的線程池的示例代碼

    本文主要介紹了C++實現(xiàn)一個簡單的線程池的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • C++實現(xiàn)二叉樹的堂兄弟節(jié)點查詢

    C++實現(xiàn)二叉樹的堂兄弟節(jié)點查詢

    C++實現(xiàn)二叉樹的堂兄弟節(jié)點查詢,是指在二叉樹中,找到兩個節(jié)點深度相同但父節(jié)點不同的節(jié)點,即為堂兄弟節(jié)點。實現(xiàn)這一功能可以通過遍歷二叉樹并記錄節(jié)點深度和父節(jié)點來實現(xiàn)
    2023-04-04
  • 判斷指定的進(jìn)程或程序是否存在方法小結(jié)(vc等)

    判斷指定的進(jìn)程或程序是否存在方法小結(jié)(vc等)

    VC判斷進(jìn)程是否存在?比如我想知道記事本是否運行,要用到哪些函數(shù)等實例,需要的朋友可以參考下
    2013-01-01
  • C語言for語句用法詳解

    C語言for語句用法詳解

    今天,小編講訴C語言中循環(huán)語句(for)的使用方法,作為示例,以一個簡單的例子講訴for語法。
    2015-11-11
  • 詳解QTreeWidget隱藏節(jié)點的兩種方式

    詳解QTreeWidget隱藏節(jié)點的兩種方式

    本文主要介紹了QTreeWidget隱藏節(jié)點的兩種方式,一種是直接隱藏,一種是間接隱藏,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • C語言實現(xiàn) 數(shù)據(jù)類型占多少字節(jié)指針占多少字節(jié)

    C語言實現(xiàn) 數(shù)據(jù)類型占多少字節(jié)指針占多少字節(jié)

    這篇文章主要介紹了 C語言 數(shù)據(jù)類型占多少字節(jié)指針占多少字節(jié)的實例代碼,代碼簡單易懂,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-09-09
  • 深入理解C++編程中的局部變量和全局變量

    深入理解C++編程中的局部變量和全局變量

    這篇文章主要介紹了深入理解C++編程中的局部變量和全局變量,是C++入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C++?STL容器適配器使用指南

    C++?STL容器適配器使用指南

    C++?STL(標(biāo)準(zhǔn)模板庫)是一套功能強大的?C++?模板類,提供了通用的模板類和函數(shù),這些模板類和函數(shù)可以實現(xiàn)多種流行和常用的算法和數(shù)據(jù)結(jié)構(gòu),如向量、鏈表、隊列、棧,今天我們來探究一下stl容器適配器的使用吧
    2021-11-11

最新評論