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

#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++主要用于动态对象的分配与删除,自动调用构造函数与析构函数。

 

原文地址:https://www.cnblogs.com/huhuuu/p/3459425.html