zoukankan      html  css  js  c++  java
  • c++11 智能指针 unique_ptr和shared_ptr

    1、unique_ptr

    //1、使用unique_ptr来管理动态内存,只要unique_ptr指针创建成功,其析构函数都会被调用,无需手动释放。
    //2、创建一个unique_ptr实例
    unique_ptr<int> pInt(new int(5));
    cout << *pInt;
    
    //3、移动 
    unique_ptr<int> pInt2 = std::move(pInt);    // 转移所有权
    
    //4、函数返回unique_ptr
    unique_ptr不支持拷贝操作,但却有一个例外:可以从函数中返回一个unique_ptr。
    unique_ptr<int> clone(int p)
    {
        unique_ptr<int> pInt(new int(p));
        return pInt;    // 返回unique_ptr
    }
    
    //5、在容器中保存指针
    vector<unique_ptr<int>> vec;
    unique_ptr<int> p(new int(5));
    vec.push_back(std::move(p));    // 使用移动语义
    
    //6、管理动态数组
    unique_ptr<int[]> p(new int[5])

    2、share_ptr

     
    shared_ptr基于”引用计数”模型实现,多个shared_ptr可指向同一个动态对象,并维护一个共享的引用计数器,记录了引用同一对象的shared_ptr实例的数量。当最后一个指向动态对象的shared_ptr销毁时,会自动销毁其所指对象(通过delete操作符)。
    
    //1、初始化
    std::shared_ptr<int> p3 = std::make_shared<int>(2);  //方式0 推荐
    std::shared_ptr<int> p1(new int(1)); //方式1
    std::shared_ptr<int> p2 = p1; //方式2
    //不要用一个原始指针初始化多个shared_ptr
    //不要在函数实参中创建shared_ptr。如下
    void f(shared_ptr<int>(new int))
    
    //尽量不用shared_ptr 管理this指针
    //2、放入容器中的动态对象,使用shared_ptr包装,比unique_ptr更合适 
    vector<shared_ptr<int>> vec;
    class T
    {}
    std::vector<std::shared_ptr<T>>

    https://www.cnblogs.com/lsgxeva/p/7788061.html     

    https://www.cnblogs.com/DswCnblog/p/5628195.html 

  • 相关阅读:
    vue-cli3搭建可视化项目架构
    select框修改默认样式
    修改checkbox的默认样式
    input和textarea修改placehold的文字颜色
    checkbox更改默认样式,以及选中文字也可以选中checkbox
    自封装 ajax 函数,ajax原理
    git@github.com: Permission denied (publickey)
    EAS webservice安全模式
    DB2 根据id查表
    office web apps server安装
  • 原文地址:https://www.cnblogs.com/lovebay/p/12767718.html
Copyright © 2011-2022 走看看