• 智能指针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;
    }
  • 相关阅读:
    python定义函数的三种形式
    python函数的返回值
    python函数的调用
    python函数的定义
    python文件操作
    Python2和3字符编码的区别
    python的字符编码
    python异常处理
    python深浅拷贝
    python色彩缤纷的python(改变字体颜色以及样式)
  • 原文地址:https://www.cnblogs.com/chen-cai/p/9566593.html
Copyright © 2020-2023  润新知