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