• 智能指针和内存管理小结


    ·概述:

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

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

  • 相关阅读:
    简单查询
    Scott用户表
    记一次Sqoop抽数据异常
    Flink+Druid构建实时OLAP的探索
    客户端埋点实时OLAP指标计算方案
    Kafka服务不可用(宕机)问题踩坑记
    实时计算-多级订单金额,及下级人数
    Apache Druid0.15.0安装方式
    superset安装文档
    Scala的常用小技巧
  • 原文地址:https://www.cnblogs.com/davidyang2415/p/2426913.html
Copyright © 2020-2023  润新知