![](/img/trans.png)
[英]Why does unique_ptr have the deleter as a type parameter while shared_ptr doesn't?
[英]Why doesn't unique_ptr::reset have overloads that take a deleter?
有沒有一個原因, unique_ptr::reset
沒有帶有const deleter&
和deleter&&
重載來匹配它的構造函數,這些構造函數將這些作為第二個參數?
unique_ptr
存儲的刪除器將被復制分配或移動分配來自reset
的參數。 如果刪除器是不可復制的或不可移動的,則調用相應的reset
重載將無法編譯。 這似乎與構造函數的一致行為。
我想添加它,但你可以使用移動賦值運算符獲得等效的功能:
ptr = unique_ptr<T, D>(new T(another_value), D(another_state));
因此,為了保持API合理地小,我選擇不對reset
說同樣的事情。
更新
我生活和學習......
語法實際上可以比我上面顯示的簡單得多:
ptr = {new T(another_value), D(another_state)};
因為刪除器存儲在構造中的對象中。 由於刪除器類型是模板參數,因此在構造之后無法“轉換”類以使用另一個類。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.