技术大神|为什么还有new/delete,C++中有malloc/free


技术大神|为什么还有new/delete,C++中有malloc/free
文章图片
malloc/free是C/C标准库函数 , new/delete是C++运算符 。 它们都可以用于动态申请和释放内存 。
对于内置类型数据而言 , malloc和new没有太大区别 , 主要区别在于:
malloc申请内存的时候要指定分配内存的字节数 , 而且不会做初始化;
new申请的时候有默认的初始化 , 同时可以指定初始化 。
但对于类类型的对象而言 , 用malloc/free通常是无法满足要求的 。
因为对象在创建的时候要自动执行构造函数 , 消亡之前要调用析构函数 。 比如下面这个例子 。
技术大神|为什么还有new/delete,C++中有malloc/free
文章图片
可以看出 , 在使用new/delete会自动调用类的构造函数和析构函数 。
【技术大神|为什么还有new/delete,C++中有malloc/free】由于malloc/free是库函数而不是运算符 , 不在编译器控制之内 , 不能把执行构造函数和析构函数的任务强加给它 , 因此 , C++还需要new/delete 。


    推荐阅读