日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

[C++11]独占的智能指针unique_ptr的初始化和使用

發布時間:2023/12/4 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [C++11]独占的智能指针unique_ptr的初始化和使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • std::unique_ptr
    是一個獨占型的智能指針,它不允許其他的智能指針共享其內部的指針,可以通過它的構造函數初始化一個獨占智能指針對象,但是不允許通過賦值將一個
    unique_ptr 賦值給另一個 unique_ptr。
  • std::unique_ptr 不允許復制,但是可以通過函數返回給其他的 std::unique_ptr,還可以通過 std::move
    來轉譯給其他的 std::unique_ptr,這樣原始指針的所有權就被轉移了,這個原始指針還是被獨占的。
  • 使用 reset 方法可以讓 unique_ptr 解除對原始內存的管理,也可以用來初始化一個獨占的智能指針。
    • ptr1.reset(); 解除對原始內存的管理
    • ptr2.reset(new int(250)); 重新指定智能指針管理的原始內存

    代碼如下:

    #include <iostream> #include <memory> #include <string> using namespace std;class Test { public:Test(){cout << "construct" << endl;}Test(int x) :m_num(x){cout << "construct x = " << x << endl;}Test(string str){cout << "construct str = " << str << endl;}~Test(){cout << "destruct" << endl;}void setValue(int v){m_num = v;}void print(){cout << "m_num = " << m_num << endl;}private:int m_num; };int main() {//通過構造函數初始化unique_ptr<int>ptr1(new int(9));//unique_ptr<int>ptr2 = ptr1; error//通過移動構造函數初始化unique_ptr<int>ptr2 = move(ptr1);//通過reset初始化ptr2.reset(new int (8));//獲取原始指針unique_ptr<Test> ptr3(new Test(1));Test*pt = ptr3.get();pt->setValue(2);pt->print();ptr3->setValue(4);ptr3->print();return 0;}

    測試結果:

    總結

    以上是生活随笔為你收集整理的[C++11]独占的智能指针unique_ptr的初始化和使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。