智能指针和内存管理小结

·概述:

    主要是两个库: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组合比较常用和重要。其他的就算是一个了解吧。

    总感觉没有在项目中使用过的技术不算是自己的技术。

原文地址:https://www.cnblogs.com/davidyang2415/p/2426913.html