boost内存管理机制

来源:互联网 发布:美国的种族歧视 知乎 编辑:程序博客网 时间:2024/05/29 03:20

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
原创粉丝点击