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
не будет обрабатывать освобождение, потому что он не был построено еще.
Это надзор? Или есть решение, которое я не заметил?