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

    unique_ptr的一些操作:

    int main()
    {
        unique_ptr<int> uptr(new int(10));
        //unique_ptr<int> uptr2(uptr);//报错
        //unique_ptr<int> uptr3 = uptr;//报错
    
        unique_ptr<int> uptr2 = std::move(uptr);//转移所有权
        //cout << *uptr << endl;//错误,uptr si NULL
    
        return 0;
    }

    unique_ptr使用场景:

      1.为动态申请的资源提供异常安全保证

    传统情况,可能会因为异常而没有走到delete部分,如下:

    void func()
    {
        int *p = new int(10);
    
        //maybe throw exception
    
        if (NULL != p)
        {
            delete p;
            p = NULL;
        }
    }

    使用unique_ptr,只要unique_ptr指针创建成功,析构函数就一定会被调用,如下:

    void func()
    {
        unique_ptr<int> uptr(new int(10));
    
        //maybe throw exception
    
        
    }

      2.返回函数内动态申请资源的所有权

    unique_ptr<int> func(int value)
    {
        unique_ptr<int> uptr(new int(value));
        return uptr;
    }
    
    int main()
    {
        unique_ptr<int> uptr2 = func(10);
        cout << *uptr2 << endl;
    
        return 0;
    }

      3.在容器内保存指针

    int main()
    {
        vector<unique_ptr<int>> vec;
        unique_ptr<int> uptr(new int(10));
        vec.push_back(std::move(uptr));
    
        return 0;
    }

      4.管理动态数组

    int main()
    {
        unique_ptr<int[]> uptr(new int[5]{1, 2, 3, 4, 5});
        uptr[0] = 100;
        cout << uptr[0] << endl;
    
        return 0;
    }
  • 相关阅读:
    Yarn的运行原理(执行流程)
    Hive 表类型简述
    hive 表类型
    Hadoop小知识点总结1
    电商交易项目案例
    乘用车辆和商用车辆销售数据分析
    搜狗搜索日志分析系统
    mysql group by 对多个字段进行分组
    group by
    输出GPLT
  • 原文地址:https://www.cnblogs.com/chen-cai/p/9566593.html
Copyright © 2011-2022 走看看