boost内存管理机制

boost主要是通过六种智能指针来管理内存的:scoped_ptr scoped_array shared_ptr shared_array weak_ptr intrusive_ptr。他们都是轻量级的对象,速度与原始指针相差无几,对于所指的类型T也仅有一个很小且很合理的要求:类型T的析构函数不能抛出异常。

scoped_ptr:仅仅提供了*和->操作,且赋值操作符和拷贝构造函数被定义为私有的,有效的防止了指针所有权的转让。 ==和!=操作符被私有化,拒绝比较操作。

scoped_array:包装了new[]操作符在堆上分配的动态数组,弥补了标准库中没有指向数组的智能指针的缺憾。在需要动态数组的情况下我们因该使用std::vector,它比scoped_array提供了更多的灵活性。除非对性能有非常苛刻的要求,或者编译器不支持标准库,否则不推荐使用scoped_array。

shared_ptr:实现的是引用计数型智能指针,可以安全的放到标准容器中。可以定制删除器,删除器要求是函数对象或者函数指针,只要能像函数那样调用,使得d(p)成立即可.对删除器的要求是它必须是可拷贝的,不能抛出异常。

shared_array:结合了scoped_array和shared_ptr的功能。

weak_ptr:没有重载operator*和->,最大的作用在于协作shared_ptr工作。可以从shared_ptr或则另一个weak_ptr构造获得资源的观测权,它的构造和析构不会引起引用计数的改变,它只是一个默默的观察者。

intrusive_ptr:对内存占用要求的非常严格,必须与原是指针一样;先存代码已经有了引用计数机制管理的对象。


内存池管理对象:pool object_pool

pool:只能作为普通数据类型如double int等的内存池 因为它只是分配内存不调用构造函数。

object_pool:既可以作为普通数据类型的内存池,又可以作为类对象的内存池。

singleton_pool:提供线程安全

pool_allocator:内存配置器

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值