Повышениеmake_shared()
функция обещает быть безопасной для исключений -при попытке создать shared_ptr
.
Почему нет эквивалента make_scoped()
? Существует ли общепринятая передовая практика?
Вот пример кода изboost::scoped_ptr
документация , которая кажется мне небезопасной:
boost::scoped_ptr x(new Shoe);
Эта строка кода будет делать эти три вещи по порядку:
Shoe
Shoe
boost::scoped_ptr
Если конструктор для Shoe
выдает исключение, произойдет утечка памяти.(см. ответ Р. Мартиньо Фернандеса)scoped_ptr
не будет обрабатывать освобождение, потому что он еще не создан.
Это упущение? Или есть решение, которое я не заметил?