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_ptrproduce an ill-formed program.- Pointers to types derived from
Tare 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[]