智能指针和内存管理小结
·概述:
主要是两个库:smart_ptr库和pool库。
smart_ptr库主要解决的问题是指针的内存泄漏和垃圾回收问题;pool则是解决内存分配问题。
感觉还是smart_ptr库比较好用一些,而其中的shared_ptr数据最常用和最好用的技巧。
·要点:
smart_ptr库:
由技巧提升为技术的。主要成员scoped_ptr/scoped_array,shared_ptr/shared_array,weak_ptr,intrusive_ptr和enable_shared_from_this,与STL的auto_ptr一起构成了智能指针系统。
基本原理都是析构函数中释放分配的内存空间,不同点是在指针的控制上。
是否持有指针 指针控制权管理
std::auto_ptr 是 简单的指针的封装;
当复制和赋值时会发生控制权转移
--即原指针失去控制权
--这决定了不能用于STL容器元素scoped_ptr
scoped_array是 不能转移控制权的auto_ptr
--也不能用于STL容器的元素shared_ptr
shared_array是 最有价值和最实用
是线程安全的
内部采用计数器的方法控制
--具体技术是内部计数变量是共有的
--可作为STL容器的元素
一般和enable_shared_from_this一起使用weak_ptr 否 是shared_ptr的辅助搭配 intrusive_ptr 是 不常用的可定制的智能指针
其中enable_shared_from_this的使用情况是,可以让shared_ptr指向的变量可以将this变成相应的shred_from_this指针。
因为shared_ptr的计数性质,可以用于一些延时释放等地方。
pool库:
基本原理是预先分配一大块内存,然后可以从大内存中再分配/释放来反复使用。因为是预分配的大内存,后面的内存分配也是用算法模拟的分配/释放,少了系统的分配/释放内存,可以提高效率和减少内存碎片。
主要成员有:pool,object_pool,singleton_pool和pool_alloc。
个人的感觉,没在具体项目中应用过还停留在认识阶段。
·小结:
还是shared_ptr和enable_shared_from_this组合比较常用和重要。其他的就算是一个了解吧。
总感觉没有在项目中使用过的技术不算是自己的技术。