次の点を考慮してください。
std::vector<std::unique_ptr<int>> ptrsToInts;
ptrsToInts.emplace_back(new int);
ベクトルで再割り当てが発生し、それが失敗した場合 ( をスローstd::bad_alloc
)、私は「安全」ですか、それともリークしint
ますか?
C++11 23.3.6.5 [vector.modifiers]/1 言います:
コピー コンストラクター、ムーブ コンストラクター、代入演算子、ムーブ代入演算子以外によって、
T
または任意のInputIterator
操作によって例外がスローされた場合、影響はありません。
これは、これが潜在的な問題であることを示しているようです。つまり、「影響がない」場合、unique_ptr
構築されたものはありません。そのため、そのポインタに依存するデストラクタの動作delete
は発生しません。(これは、s のemplace_back
コンテナーに対して禁止する必要があることを示している可能性がありますunique_ptr
)