C++關鍵字new和delete與C語言的malloc和free函數

在C語言中想要在堆上申請內存空間可以使用malloc一族的函數。而釋放申請的空間需要使用free函數。

C++提供了新的關鍵字new和delete來完成malloc和free所具備的功能。當然它們並不是完全一致。最主要的區別是C語言提供的函數在爲對象申請空間的時候,不會觸發構造函數;同時free在釋放空間的時候不會觸發析構函數。而new和delete則可以觸發構造函數和析構函數。

#include<iostream>
/*在C++中使用new 和 delete來分配和釋放空間*/
/*在C語言中使用malloc和free來分配和釋放空間*/

using namespace std;
class A
{
public:
	A();
	~A();

private:

};

A::A()
{
}

A::~A()
{
}


int main()
{
	int *p(NULL);
	p = new int(333);			//使用new來申請內存空間;並把這塊空間初始化爲333;
	cout << *p << endl;
	delete p;					//使用delete來釋放內存空間;注意:delete在釋放某些對象時後面有[];
	int a[10];
	int(*p1)[10] = &a;			//說明這是一個指針數組
	cout << a << endl;
	cout << &a+1 << endl;
	char *str = new char[30];	//new一個30大小的char數組。
	delete[] str;				//釋放數組的時候需要加上[]。

	A * myclass = new A;
	delete myclass;

	A* myclass1 = (A*)malloc(sizeof(A));
	free(myclass1);

	return 0;
}

調試這段代碼就可以知道,new,delete,malloc,free得不同之處了。

除了應用在對象的時候,new,delete和malloc,free表現得不一致之外。其餘時候沒有什麼區別。但是並不建議混用它們。例如:使用malloc來申請內存,而使用delete來釋放內存。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章