Czy używanie emplace_back z kontenerem unique_ptrs jest bezpieczne?

Rozważ następujące:

std::vector<std::unique_ptr<int>> ptrsToInts;
ptrsToInts.emplace_back(new int);

Jeśli realokacja nastąpi w wektorze, a to się nie powiedzie (rzucaniestd::bad_alloc), czy jestem „bezpieczny”, czy też wycieknęint?

C ++ 11 23.3.6.5 [vector.modifiers] / 1 mówi:

Jeśli zostanie zgłoszony wyjątek inny niż konstruktor kopii, konstruktor ruchu, operator przypisania lub operator przypisania przeniesieniaT lub dowolneInputIterator operacja nie ma efektów.

co wydaje się wskazywać, że jest to potencjalny problem. To znaczy, jeśli są „brak efektów”, to nieunique_ptr kiedykolwiek został skonstruowany, a zatem zachowanie destruktora, na którym można polegaćdelete ten wskaźnik nie wystąpi. (Co może to wskazywaćemplace_back należy zakazać pojemników zunique_ptrs)

questionAnswers(1)

yourAnswerToTheQuestion