c++再学习(内存管理函数的重载)

39 篇文章 4 订阅
24 篇文章 0 订阅

在实现stl的过程中遇到了很多内存管理方面的问题,这里做个笔记以便复习,也供大家参考。
1.内存管理的手段
malloc()/free():malloc()是c语言中就存在的内存管理函数(库函数),不能够被重载,需要手动传开辟空间的大小,失败返回NULL,错误形式返回错误码,返回值为void*(不了解什么是void*的,可以查看这篇博客),通过强制转型与分配的对应位置一致。
new()/delete():c++中新增的内存操作符(注意它不是一个函数(可以严格把它称为new operator和后面的operator new 区分开来)),new包含两个部分,一是分配内存,二是调用构造函数,delete和new同理。
operator new/delete:实际操作内存的手段,在源码中可以看到是调用了malloc和free实现。不需要手动传入开辟内存的大小,错误形式为抛出异常(其实就是封装过了的malloc/free)注意!!这个部分是可以重载的!
placement new:

new (指针)构造函数(参数1,参数2……);

其实placement new 本身并不分配内存,它只是给一个确定分配好的指针建立对象,所以说其实也不存在对应的placement delete,但是也有习惯性把placement new
对应的delete称为placement delete,无需纠结,意会即可。

allocator:stl中对容器已经封装好的内存管理器,随调随用即可。

就这样我们捋出了一条路线,最基础的内存分配时malloc/free,operator new/delete是对malloc/free的封装加强,
new/delete关键字是对operator new/delete的封装加强,allcator是在stl中适应stl的特殊内存分配方式,placement new是对已经分配好的内存进行操作的方式。由此可见,对于内存的管理贯穿了c/cpp的发展。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值