日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網(wǎng)站首頁 編程語言 正文

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

作者:一起慢慢變強 ? 更新時間: 2022-06-22 編程語言

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

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

但是總體來說不是很方便,所以c++擁有了一種新的方式來對內(nèi)存進行管理:通過new和delete操作符來對內(nèi)存進行動態(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)建出的對象進行初始化,也可以顯示的寫出想要被初始化的值,而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是用戶進行動態(tài)內(nèi)存申請和釋放的操作符

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

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

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

最終還是通過malloc和free來進行動態(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ù)進行初始化

delete的原理

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

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

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

原文鏈接:https://blog.csdn.net/qq_45358642/article/details/124201081

欄目分類
最近更新