zoukankan      html  css  js  c++  java
  • C++11:18shared_ptr共享的智能指针

    18shared_ptr共享的智能指针

    0、课前秀

    • 智能指针不会担心内存泄漏的问题,会自动删除分配的内存。
    • 智能指针是存储指向动态分配(堆)对象指针的类,用于生存期控制,能够确保在离开指针所在作用域时,自动正确地销毁动态分配的对象,防止内存泄漏。
    • 提供3种智能指针,引用头文件<memory>
      • std::shared_ptr
      • std::uniq_ptr
      • std::weak_ptr
    • shared_ptr是个类,要用类的思维去学它,不是个关键字。

    1、shared_ptr原理介绍

    • std::shared_ptr使用引用计数,每一个shared_ptr的拷贝都指向相同的内存。
    • 在最后一个shared_ptr析构的时候,内存才会被释放。

    2、shared_ptr的基本用法

    2.1、初始化

    • 代码
    std::shared_ptr<int> p(new int(1));
    std::shared_ptr<int> p2 = p;
    //reset方法来初始化
    std::shared_ptr<int> ptr;
    ptr.reset(new int(1));
    if(ptr)
    {
        cout<<"ptr is not null";
    }
    

    2.2、获取原始指针

    std::shared_ptr<int> ptr(new int(1));
    int* p = ptr.get();
    

    2.4、指定删除器

    • 一般写法
    void DeleteIntPtr(int* p)
    {
        delete p;
    }
    std::shared_ptr<int> p(newint,DeleteIntPtr);
    
    • lambda表达式写法

    std::shared_ptr<int> p(new int,[](int* p){delete p;});

    3、使用shared_ptr需要注意的问题

    • 不要用一个原始指针初始化多个shared_ptr
    • 不要在函数实参中创建shared_ptr。
    • 通过shared_from_this()返回this指针。
    • 要避免循环引用

    ReadMe

    • 20200506整理完第一版,《深入应用C++》4.1。
      • 事实上有点稀里糊涂的,没有主动把知识串起来的感觉
  • 相关阅读:
    分页 存储过程
    Base64编码
    汉字转拼音 完整类
    C#利用SharpZipLib解压或压缩文件夹实例操作
    C#压缩解压zip 文件
    MapReduce shuffle原理
    设计模式(一)—— 代理模式
    Lombok的基本使用
    解决idea 每次新建项目需要重新配置maven
    10-20 Spring框架(三)—— AOP核心
  • 原文地址:https://www.cnblogs.com/fewolflion/p/12937221.html
Copyright © 2011-2022 走看看