#include<iostream> using namespace std; class Obj{ public : Obj(){cout<<"Initialization"<<endl;} ~Obj(){cout<<"Destroy"<<endl;} void Init(){cout<<"Initialization2"<<endl;} void Destroy(){cout<<"Destroy2"<<endl;} }; void malloc_test(){//malloc/free 不会执行构造函数与析构函数 Obj *a=(Obj*)malloc(sizeof(Obj)); a->Init(); //~~~~~ a->Destroy(); free(a); } void new_test(){ Obj * a=new Obj; delete a; } int main(){ malloc_test(); new_test(); }
除了前者是函数,后者是标识符的区别外
前者是在C语言中诞生的,用于内存分配但是不会执行构造函数与析构函数。(这里没有继承,要是有继承关系,用free就难以处理从派生类到基类的析构了,内存泄露在所难免)
后者是C++主要用于动态对象的分配与删除,自动调用构造函数与析构函数。