C++11標準ライブラリ提供のstd::unique_ptr
クラステンプレートでは、第1テンプレート引数に配列型T[]
を指定したときのみ添字アクセス([]
演算子)を利用可能となる。ただし、この部分特殊化では*
演算子と->
演算子は提供されない。
#include <memory> { std::unique_ptr<int> p1( new int(100) ); *p1 = 42; // OK p1[0] = 21; // NG: ill-formed } // "delete p1.get()"が呼び出される { std::unique_ptr<int[]> p2( new int[10] ); *p2 = 42; // NG: ill-formed p2[0] = 21; // OK } // "delete[] p2.get()"が呼び出される
N3337 20.7.1.3/p1より引用。
A specialization for array types is provided with a slightly altered interface.
- Conversions between different types of
unique_ptr<T[], D>
or to or from the non-array forms ofunique_ptr
produce an ill-formed program.- Pointers to types derived from
T
are rejected by the constructors, and byreset
.- The observers
operator*
andoperator->
are not provided.- The indexing observer
operator[]
is provided.- The default deleter will call
delete[]