Ревьюер назвал emplace_back(new Widget) утечкой при нехватке памяти
std::vector<std::unique_ptr<Widget>> widgets;
void add(const Config& cfg) {
widgets.emplace_back(new Widget(cfg));
}
Автор возражает: «unique_ptr сам удалит объект». Прав ли ревьюер?
- Да: при исключении роста указатель ещё сырой
- Нет: emplace_back сначала создаёт unique_ptr
- Нет: new не бросает исключений в C++17
- Да: emplace_back копирует unique_ptr
