Почему у Boost нет области видимости _()?

Повышениеmake_shared()функция обещает быть безопасной для исключений -при попытке создать shared_ptr.

Почему нет эквивалента make_scoped()? Существует ли общепринятая передовая практика?

Вот пример кода изboost::scoped_ptrдокументация , которая кажется мне небезопасной:

    boost::scoped_ptr x(new Shoe);

Эта строка кода будет делать эти три вещи по порядку:

  • Выделить память кучи дляShoe
  • Вызовите конструктор дляShoe
  • Вызовите конструктор дляboost::scoped_ptr

Если конструктор для Shoeвыдает исключение, произойдет утечка памяти.(см. ответ Р. Мартиньо Фернандеса)scoped_ptrне будет обрабатывать освобождение, потому что он еще не создан.

Это упущение? Или есть решение, которое я не заметил?

15
задан Drew Dormann 19 January 2013 в 19:38
поделиться