C++ 内存申请

1.new/delete 和operator new/operator delete和malloc/free的关系、new[]时底层处理的机制

operator new/operator delete等和malloc/free用法一样,他们值负责分配或释放空间,不会调用构造函数或析构函数,实际上operator new和operator delete是malloc/free的一层封装

new[]开空间的时候,为了方便访问,通常会在空间的头4个字节来存放个数,因此要多开4个字节。所以会出现以下问题:

<1>如果是自定义类性,写析构后,delete会调自己写的析构函数,所以就要自己写析构函数,将指针前4个字节用来存放数组元素个数,并且多开4个字节空间。

<2>如果不写,系统自动生成析构函数,但不一定会多开4个字节存放个数(看编译器优化)

<3>如果是内置类型,不会多开4个字节存放个数。


2.new/delete和malloc/free的区别

<1>他们都是动态管理内存的入口

<2>malloc/free是C/C++标准库的函数,new/delete是C++操作符

<3>malloc/free仅仅只是动态分配内存空间/释放空间,而new/delete除了分配空间还会调用构造函数和析构函数进行初始化与清理(清理成员)。

<4>malloc/free需要手动计算类型大小返回void*,malloc失败后返回0,而new/delete可以自己计算大小,返回对应类型的指针,new失败后抛异常

 

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值