В руководстве по стилю/архитектуре bada C++ используется двухэтапная инициализация объектов C++.
Почему они просто не потребовали использования scoped_ptr?
В руководстве по стилю/архитектуре bada C++ используется двухэтапная инициализация объектов C++.
Почему они просто не потребовали использования scoped_ptr?
Вы должны спросить их, потому что я не экстрасенс.
Однако я подозреваю, что их ответ будет таким же, как написано жирным шрифтом в верхней части этой страницы: «Без двухэтапного построения происходит утечка ресурсов».
Однако я не согласен с этой оценкой; реальная проблема заключается в том, что их тело конструктора ComplexClass
не защищено от исключений. С учетом этого код будет гораздо более надежным при использовании простого RAII, особенно при его масштабировании.
С точки зрения «почему они просто не потребовали scoped_ptr»: я полагаю, что это документ C++03, в котором говорится о C++, а не о сторонних библиотеках.
unique_ptr
, что похоже на scoped_ptr
, но подвижно.
- person Steve Jessop; 09.11.2011
new
на нулевое значение. Но в своем неверном коде они утверждают, что сбой выделения может помешать вызову деструктора ComplexClass
, что означает, что они думают, что исключение будет выброшено из new
и, следовательно, из конструктора. Так что либо у них нестандартный new
, который испортит их стиль кодирования, требуя проверки пояса и скобок, либо тот, кто написал руководство по стилю, окончательно запутался.
- person Steve Jessop; 09.11.2011
Объем не является причиной для двухэтапного строительства. Тот факт, что у конструкторов нет другого способа вернуть ошибку, кроме исключения, и они не используют исключения (ИМХО, единственная причина в том, что они думают, что это все еще 10 лет назад).