Рассмотрим следующее:
std::vector<std::unique_ptr<int>> ptrsToInts;
ptrsToInts.emplace_back(new int);
Если перераспределение происходит в векторе, и что не выполняется (выбрасывание std::bad_alloc), я "безопасен" или я пропущу int?
С++ 11 23.3.6.5 [vector.modifier]/1 говорит:
Если исключение выбрано иначе, чем конструктор копирования, переместите конструктор, оператор присваивания или оператор присваивания перемещения
Tили любой из операцийInputIterator, никаких эффектов нет.
что, по-видимому, указывает на то, что это потенциальная проблема. То есть, если "нет эффектов", тогда не было построено unique_ptr, и поэтому поведение деструктора было бы опираться на delete, чтобы указатель не возникал. (Это может означать, что emplace_back должен быть запрещен для контейнеров unique_ptr s)