malloc/free和new/delete的区别

来源:互联网 发布:物流软件 上海 编辑:程序博客网 时间:2024/05/08 06:08

本质区别
malloc/free是C/C++语言的标准库函数,new/delete是C++的运算符。
对于用户自定义的对象而言,用maloc/free无法满足动态管理对象的要求。对象在创建的同时要自动执行构造函数,对象在消亡之前要自动执行析构函数。由于malloc/free是库函数而不是运算符,不在编译器控制权限之内,不能够把执行构造函数和析构函数的任务强加于malloc/free。因此C++需要一个能完成动态内存分配和初始化工作的运算符new,以及一个能完成清理与释放内存工作的运算符delete。

对于非内置数据类型,在进行动态创建的时候很多情况下是需要初始化的,使用malloc只是分配了空间,但是未进行初始化,这是一种不安全的做法;在销毁一个动态分配的非内置类型对象的时候的使用free只是销毁了该对象存储的空间,但是未进行必要的清理工作,在C++中表现出不来的是未使用析构函数,在该非内置类型中存在指针成员变量的时候是容易发生内存泄露的危险的。

但是我们使用new和delete就不同了,当使用new的时候就会自动调用该非内置类型的constructor,完成对象的初始化工作,调用delete的时候自动调用destructor,自动完成清理的工作。



(参考:http://blog.csdn.net/hackbuteer1/article/details/6789164)

原创粉丝点击