class template
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[]
によるアクセスを提供している。
メンバ関数
単一オブジェクト版(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 |
非メンバ関数
名前 |
説明 |
対応バージョン |
operator== |
等値比較 |
C++11 |
operator!= |
非等値比較 |
C++11 |
operator< |
左辺が右辺より小さいかを判定する |
C++11 |
operator<= |
左辺が右辺以下かを判定する |
C++11 |
operator> |
左辺が右辺より大きいかを判定する |
C++11 |
operator>= |
左辺が右辺以上かを判定する |
C++11 |
swap |
2つのunique_ptr オブジェクトを入れ替える |
C++11 |
make_unique |
unique_ptr を構築するヘルパ関数 |
C++14 |
template<class E, class T, class Y, class D>
basic_ostream<E, T>& operator<<(basic_ostream<E, T>& os, const unique_ptr<Y, D>& p); |
保持するポインタ値を出力する。この関数はos << p.get() が有効である場合にのみオーバーロード解決に参加する。 |
C++17 |
ハッシュサポート
名前 |
説明 |
対応バージョン |
template <class T> struct hash; |
hash クラスの先行宣言 |
C++11 |
template <class T, class D> struct hash<unique_ptr<N>>; |
hash クラスのunique_ptr に対する特殊化 |
C++11 |
例
出力
hoge::hoge()
hoge::~hoge()
バージョン
言語
処理系
参照
関連項目