類模板
<memory>

std::unique_ptr

non-specialized
template <class T, class D = default_delete<T>> class unique_ptr;
array specialization
template <class T, class D> class unique_ptr<T[],D>;
唯一指標
管理指標的儲存,提供一種有限的垃圾回收機制,與內建指標相比開銷幾乎沒有(取決於使用的刪除器)。

這些物件能夠獲取指標的所有權:一旦它們獲得所有權,它們就透過負責在某個時間點刪除該物件來管理被指向的物件。

unique_ptr物件會在自身被銷燬時,或者在它們的賦值操作(assignment operation)或顯式呼叫unique_ptr::reset時,自動刪除它們所管理的(使用刪除器)的物件。

unique_ptr物件唯一地擁有其指標:沒有其他機制負責刪除該物件,因此不應有其他管理指標指向其管理的物件,因為一旦需要,unique_ptr物件刪除其管理的物件,而不考慮其他指標是否仍然指向同一物件,從而使任何指向該物件的其他指標指向無效位置。

Aunique_ptr物件有兩個組成部分
  • 一個儲存的指標:指向它所管理的物件。它在構造時設定,可以透過賦值操作或呼叫成員reset來更改,並且可以使用成員getrelease單獨訪問以進行讀取。
  • 一個儲存的刪除器:一個可呼叫物件,它接受一個與儲存的指標型別相同的引數,並在被呼叫時刪除被管理的物件。它在構造時設定,可以透過賦值操作來更改,並可以使用成員get_deleter單獨訪問。

unique_ptr物件透過運算子提供對其管理物件的訪問,從而複製有限的指標功能*->(用於單個物件),或運算子[](用於陣列物件)。出於安全原因,它們不支援指標算術,並且僅支援移動賦值(停用複製賦值)。

模板引數

T
被管理物件的型別,別名為成員型別element_type.
D
用作刪除器的可呼叫物件的型別,別名為成員型別deleter_type.
預設情況下,它是default_delete,一個無狀態的仿函式,僅使用全域性的delete進行操作,該類整體上不會對內建指標造成額外的開銷。

成員型別

以下別名是unique_ptr.

成員型別定義說明
element_type第一個模板引數(T)被管理物件的型別
deleter_type第二個模板引數(D)儲存的刪除器的型別。
預設為default_delete<T>
指標remove_reference<D>::type::pointer如果此型別存在
T*否則
指標型別

成員函式


僅限於非特化的版本(單個物件):

僅限於執行時長度的陣列特化版本:

非成員函式過載