C++探幽:malloc/free与new/delete

本文介绍了C++/C标准库函数malloc/free和C++运算符new/delete。对于非内部数据类型对象,malloc/free无法满足动态对象要求,不能自动执行构造和析构函数。new/delete内置多种功能,创建动态对象时可完成初始化。内部数据类型对象上二者部分等价,C++调用C函数时仍需malloc/free。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

标准库函数与运算符

malloc/free是C++/C 的标准库函数,new/delete是C++的运算符。对于非内部数据类型对象而言,只使用malloc/free无法满足动态对象的要求。对象在创建的同时自动执行构造函数,消亡之前要自动执行析构函数。malloc/free不在编译器控制范围内,不能将构造函数和析构函数强加于malloc、free。

malloc/free

只申请内存的大小,对象的初始化是需要额外进行的。malloc/free 最需要的注意的就是申请的字节数的大小和指针类型转换。

new /delete

使用时不需要指定大小,因为内置了sizeof,类型转换和类型安全检查功能,对于非内部数据类型的对象而言,new在创建动态对象的同时完成了初始化工作。

对于内部数据类型对象,malloc和new的做的事情是等价的,但是对于动态对象的内存管理还是使用new/delete 为妙。new/delete完全覆盖了malloc/free的功能,但是malloc/free不能弃用,因为C++很多时候需要调用C的函数,而C的内存管理依赖于malloc/free。

想学习C++内存管理的强烈推荐这篇

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值