void processWidget(std::tr1::shared_ptr<Widget> pw, int priority);
...
processWidget(std::tr1::shared_ptr<Widget>(new Widget), priority());
- Выполнение new Widget
- Вызов функции priority()
- Вызов конструктора tr1::shared_ptr
class Widget {
public:
...
static void* operator new(std::size_t size, // необычная
std::ostream& logStream) // форма new
throw(std::bad_alloc);
static void operator delete(void *pMemory // обычная
std::size_t size) throw(); // форма delete
// уровня класса
...
};
Widget *pw = new (std::cerr) Widget;
То, при генерации исключения конструктором, происходит гарантированная утечка памяти.
Кроме этого автор поднимает такие вопросы, как физическая и логическая константность, проблему инициализации нелокальных статических объектов, идиому ''захват ресурсов есть инициализация'' (Resource Acquisition Is Initialization - RAII), проблему сокрытия имен и многие другие. В новом издании добавлены вопросы безопасности исключений (три вида гарантии исключений, перекачивали из книг Герба Саттера). Вот, что автор пишет по этому поводу: ''Женщина либо беременна, либо нет. Невозможно быть чуть-чуть беременной. Аналогично программная система является либо безопасной по исключениям, либо нет. Нет такого понятия, как частично безопасная система. Если система имеет всего одну небезопасную относительно исключений функцию, то она небезопасна и в целом.''. Также большое внимание уделяется грядущим дополнениям языка, в частности std::tr1::shared_ptr, std::tr1::function, std::tr1::bind, не забыт и boost.
В книге описаны проблемы, с которыми сталкивается каждый профессиональный разработчик, и конечно программист с достаточным опытом все эти проблемы уже испытал на себе и едва ли найдет большое количество новой информации, но повторить какие-то языковые идиомы - тоже не лишне. Если же ваш опыт не достиг заоблачных высот, вы не выучили на зубок книги Г. Саттера, А. Александреску, Д. Элджера, Дж. Коплиента и не можете среди ночи процитировать первый абзац 527 страницы книги Б. Страуструпа, то эта книга, несомненно, для вас. Из недостатков хотелось бы отметить невысокое качество издания: не блещет и качество бумаги, да и в переводе попадаются неточности. Но в целом книга стоит того, чтобы за нее отдать деньги и потратить время на ее изучение.