在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来释放内存。