malloc与free是C/c++的标准库函数,new/delete是运算符;它们都可用于在堆上动态申请或释放内存
对于malloc与free,它无法满足非内部数据类型对象的动态生成与消亡;即定义了一个类class,类的对象实例化与消除是通过构造函数与析构函数完成;malloc与free无法通过类 的指针来生成一个类空间,因为编译器无法将构造函数与析构函数的任务加于malloc与free;
而new与delete是运算符;可以
class obj
{
obj()
{
}
~obj()
{
}
}
obj *p = new obj;
delete p;
这样通过new与delete实例对象 可以调用类的构造与析构函数
例子:
#include <iostream>
using namespace std;
class Obj
{
public:
Obj()
{
cout << "Obj() runing" << endl;
}
~Obj()
{
cout << "~Obj() runing" << endl;
}
};
void usemalloc_free()
{
Obj *p = (Obj*)malloc(sizeof(Obj));
free(p);
}
void usenew_delete()
{
Obj *p = new Obj;
delete p;
}
int main()
{
usenew_delete();
cout << "||||||||||||||||||||||||||||" << endl;
usemalloc_free();
return 0;
}
结果
() runing
~Obj() runing
||||||||||||||||||||||||||||