在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來釋放內存。