GeezerVison is showing cpprefjp.github.io — std::unique_ptr - cpprefjp C++日本語リファレンス
最終更新日時:
2026年09月19日 21時31分51秒 (JST)
rotarymars
が更新
履歴
編集
class template
<memory>
std:: unique_ptr (C++11)
namespace std {
// 単一オブジェクト版
template < class T , class D = std :: default_delete < T >>
class unique_ptr ;
// 配列版
template < class T , class D >
class unique_ptr < T [], D > ;
}
概要
unique_ptrは指定されたリソースへのポインタの所有権(ownership)を唯一(unique)持っているように振舞うスマートポインタである。auto_ptrを置き換えるものとしてC++に追加された。
unique_ptrはコピー不可能なクラスである。代わりにムーブによって所有権を他のunique_ptr へ譲渡することができる。また、shared_ptr はunique_ptrを受け取るムーブコンストラクタとムーブ代入演算子を持つ。
new[]演算子で作成された配列へのポインタにも対応している。
T[]時にdelete[]を呼び出すようにdefault_delete を特殊化している。auto_ptrでは配列を渡すことができなかった(正確にはデストラクタでdelete[]ではなくdeleteが呼び出されるため上手く動作しない)。
unique_ptr自体もT[]時には部分特殊化され、operator[]によるアクセスを提供している。
適格要件
C++26 : T*が有効な型とならないunique_ptr<T&, D>やunique_ptr<int() const, D>のような特殊化の実体化がないこと
メンバ関数
単一オブジェクト版(unique_ptr<T>)固有のメンバ関数
配列版(unique_ptr<T[]>)固有のメンバ関数
メンバ型
名前
説明
対応バージョン
pointer
所有するリソースのポインタ型element_type*(T*) 。ただし、deleter_type::pointer 型が存在する場合はその型になる。
C++11
element_type
要素型T
C++11
deleter_type
デリータの型D
C++11
非メンバ関数
ハッシュサポート
名前
説明
対応バージョン
template <class T> struct hash;
hashクラスの先行宣言
C++11
template <class T, class D> struct hash<unique_ptr<T, D>>;
hashクラスのunique_ptrに対する特殊化
C++11
例
出力
hoge::hoge()
hoge::~hoge()
バージョン
言語
処理系
関連項目
参照