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

歡迎訪問 生活随笔!

生活随笔

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

c/c++

unique函数_走进C++11(三十四)unique_ptr

發布時間:2025/3/21 c/c++ 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 unique函数_走进C++11(三十四)unique_ptr 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

std::unique_ptr是C++11標準中用來取代std::auto_ptr的指針容器(在C++11中,auto_ptr被廢棄)。它不能與其它unique_ptr類型的指針對象共享所指對象的內存。這種”所有權”僅能夠通過標準庫的move函數來轉移。unique_ptr是一個刪除了拷貝構造函數、保留了移動構造函數的指針封裝類型。下面的腦圖總結了unique_ptr的特性:

1. ?一個unique_ptr"擁有"它所指向的對象。與shared_ptr不同,某個時刻只能有一個unique_ptr指向一個給定對象。當unique_ptr被銷毀時,它所指向的對象也被銷毀。

2. 與shared_ptr不同,在C++11中,沒有類似make_shared的標準庫函數返回一個unique_ptr。當定義一個unique_ptr時,需要將其綁定到一個new返回的指針上。至于為什么沒有make_unique的標準函數庫。標準的人說:“忘了”?????不過到了C++14,標準中加入了make_unique的定義。其實如果想用make_unique我們可以實現一個簡單版本的:

templatestd::unique_ptr make_unique(Args&&... args){ return std::unique_ptr(new T(std::forward(args)...));}

3. 類似shared_ptr,初始化unique_ptr必須采用直接初始化形式。由于一個unique_ptr擁有它指向的對象,因此unique_ptr不支持普通的拷貝或賦值操作。雖然不能拷貝或賦值unique_ptr,但可以通過調用release或reset將指針的所有權從一個(非const)unique_ptr轉移給另一個unique。

不能拷貝unique_ptr的規則有一個例外:我們可以拷貝或賦值一個將要被銷毀的unique_ptr (C++ Primer 5th p418)

//從函數返回一個unique_ptrunique_ptr?func1(int?a){ return unique_ptr (new int(a));}//返回一個局部對象的拷貝unique_ptr?func2(int?a){ unique_ptr up(new int(a)); return up;}

傳unique_ptr參數可以使用引用避免所有權的轉移,或者暫時的移交所有權

void func1(unique_ptr &up){ cout<}unique_ptr func2(unique_ptr up){ cout< return up;}//使用up作為參數unique_ptr up(new int(10));//傳引用,不拷貝,不涉及所有權的轉移func1(up);//暫時轉移所有權,函數結束時返回拷貝,重新收回所有權up = func2(unique_ptr (up.release()));//如果不用up重新接受func2的返回值,這塊內存就泄漏了

4. 調用release會切斷unique_ptr和它原來管理的對象間的聯系。release返回的指針通過被用來初始化另一個智能指針或給另一個智能指針賦值。如果不用另一個智能指針來保存release返回的指針,程序就要負責資源的釋放。

5. 類似shared_ptr,unique_ptr默認情況下用delete釋放它指向的對象。與shared_ptr一樣,可以重載一個unique_ptr中默認的刪除器。但是,unique_ptr管理刪除器的方式與shared_ptr不同。

默認情況下,std::shared_ptr會調用delete來清空內存。當使用new[] 分配內存時,需要調用delete[] 來釋放內存,否則會有內存泄露。

可以通過以下代碼來自定義釋放內存的函數:

templatetypename?T?> struct array_deleter {?????void?operator?()(T?const?*?p) delete[] p; } };

通過以下代碼來聲明std::shared_ptr指針:

std::shared_ptr<int> sp(new int[10], array_deleter<int>());

此時,shared_ptr可正確的調用delete[]。

在C++11中,可以使用 std::default_delete代替上面自己寫的array_deleter:

std::shared_ptr<int> sp(new int[10], std::default_delete<int[]>());?

也可以使用一下的lambda表達式來自定義刪除函數

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

實際上,除非需要共享目標,否則unique_ptr更適合使用數組:

std::unique_ptr<int[]> up(new int[10]); // this will correctly call delete[]?

上面代碼可以正確的分配空間,但是空間內的值都沒有初始化。如果需要默認初始化為0,可以使用下面的代碼:

std::unique_ptr<int[]> up(new int[10]()); // this will correctly call delete[] 初始化為0

6. unique_ptr的常用操作

unique_ptr up?
空的unique_ptr,可以指向類型為T的對象,默認使用delete來釋放內存

unique_ptr up(d)?
空的unique_ptr同上,接受一個D類型的刪除器d,使用刪除器d來釋放內存

up = nullptr?
釋放up指向的對象,將up置為空

up.release()?
up放棄對它所指對象的控制權,并返回保存的指針,將up置為空,不會釋放內存

up.reset(…)?
參數可以為?空、內置指針,先將up所指對象釋放,然后重置up的值.

總結

以上是生活随笔為你收集整理的unique函数_走进C++11(三十四)unique_ptr的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 婷婷久久久| 国产又黄又粗又长 | 一级片大全 | 国产激情影院 | 懂色av蜜臀av粉嫩av分享 | 女性私密整形视频 | 自拍偷拍亚洲欧洲 | 日日夜夜操操操 | 男人的天堂网在线 | 亚洲精品美女视频 | 黄av网| 亚洲夜夜爱 | 欧美午夜精品久久久久久人妖 | 精品久久伊人 | 国产青青草在线 | sm久久捆绑调教精品一区 | 日韩欧美午夜 | 欧美亚洲国产一区二区三区 | 国产日韩欧美一区 | 91 久久 | 亚洲国产第一区 | 国产精品日 | 亚洲一区二区 | 97桃色| 国产欧美一区二区三区免费看 | 日韩av有码 | 成人在线免费看片 | 国产精品国产av | 九九九在线 | 国模在线视频 | 亚洲图片小说视频 | 成人精品视频在线 | 国产福利精品视频 | 国内偷拍一区二区 | 国产精品天天av精麻传媒 | 国产精品夜夜爽 | 日本女人性视频 | 天天摸天天操天天爽 | 国产盗摄一区二区三区 | 性做久久久 | 国产精品igao| 成年人免费大片 | 嫩草视频在线看 | 亚洲欧美日韩在线播放 | 新天堂在线 | 日本一区二区久久 | 色偷偷人人澡人人爽人人模 | 欧美特级a | 超碰97在线看 | 瑟瑟综合 | 李华月全部毛片 | 欧美三级中文字幕 | 四虎在线视频 | 国产欧美一区二区三区精华液好吗 | 老汉av网站 | 亚洲成人精品久久久 | 天堂视频在线观看免费 | 波多野结衣av在线免费观看 | 射黄视频 | 女儿的朋友4在线观看 | 超碰极品| 风韵丰满熟妇啪啪区老熟熟女 | 日本a级c片免费看三区 | 欧美日韩免费一区 | 久久作爱 | 国产sm在线观看 | 青青国产在线视频 | 午夜免费影院 | 日日骚一区二区 | 一级黄网 | 久久久久久久久艹 | 成人黄色激情网 | 特黄一级大片 | 国产视频中文字幕 | 久久久国产打桩机 | 欧美99视频 | 人人爽人人 | 日本xxxxxⅹxxxx69 | 国产乱人伦精品 | 亚洲黄网av | 国产精品无码白浆高潮 | 国产夫妇交换聚会群4p | 亚洲aⅴ乱码精品成人区 | 美女扒开腿让男生桶 | 日韩三级在线免费观看 | 成人深夜小视频 | 精品人妻伦一二三区久久 | 91蝌蚪少妇偷拍 | 无码国产色欲xxxxx视频 | 日本在线中文字幕专区 | 国产精品乱码妇女bbbb | 少妇高潮迭起 | 亚洲国产精品免费在线观看 | 亲切的金子餐桌片段的金子 | 影音先锋色小姐 | av在线资源播放 | 日本暧暧视频 | 国产一级二级在线观看 | 日韩美女中文字幕 |