zoukankan      html  css  js  c++  java
  • 智能指针和内存管理小结

    ·概述:

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

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

  • 相关阅读:
    删除链表的倒数第N个节点
    SVN快速入门(TSVN)
    C# HttpWebRequest提交数据方式浅析
    简单的3个SQL视图搞定所有SqlServer数据库字典
    简单统计SQLSERVER用户数据表大小(包括记录总数和空间占用情况)
    详细讲解Android对自己的应用代码进行混淆加密防止反编译
    PHP之网络编程
    PHP之ThinkPHP模板标签操作
    PHP之ThinkPHP数据操作CURD
    关于数组的取极值和排序
  • 原文地址:https://www.cnblogs.com/davidyang2415/p/2426913.html
Copyright © 2011-2022 走看看