雕刻时光

just do it……nothing impossible
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

malloc/free与new/delete的不同及注意点

Posted on 2013-12-05 14:08  huhuuu  阅读(441)  评论(0编辑  收藏  举报
#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++主要用于动态对象的分配与删除,自动调用构造函数与析构函数。