Хочется на полную начать использовать новый стандарт, но, поскольку, работается сейчас под Windows, на 10 студии(и неизвестно, когда перейду на новую) + новый стандарт много чего позаимствовал в Boost + Boost это большая и серьёзная библиотека + все крутые дядьки, которые внесли не малую долю в развитие C++ советуют ознакомиться с Boost — в общем, думаю, не плохо для начала начать «серьёзно» использовать тот же Boost.
Всё с чем мне приходилось сталкиваться до сегодня — это Smart Pointers
(в некоторой степени) и Program_options
.
Так вот — в чём суть вопроса:
как, не доходя до крайностей(например, заменой всех new/delete
на boost::shared_ptr
, unique_ptr
и т.д. — «вау, я использую/знаю Boost») начинать немножко вливаться в весь этот огромный Boost и C++11? Конечно же, я могу смотреть на список задач, которые нужно выполнить и на список возможностей Boost — выбирать нужную мне библиотеку, использовать и на этом всё. Но! Хочется понимать основы на которых это всё строится, как это работает, почему именно это, а не то и т.д. Что значит «понимать» для меня? Ну, например, почему, когда «можно» — лучше использовать boost/std::make_shared
, вместо shared_ptr<T> ptr(new T(...))
? Потому что, в таком случае происходит оптимизация — вместо 2х выделений памяти(собственно, для объекта и для счётчика) происходит только одно… Это всё хорошо — если загуглить, то везде так и пишут, объясняя причину, но мне нужно «на собственные глаза» увидеть это: дебаггером, действительно видно, что в случае с shared_ptr
происходит выделение одного куска памяти и для счётчика, и для объекта T
, а потом, с помощью размещающего new
, происходит инициализация объекта. И сразу же становиться ясно, откуда берётся «недостаток» make_shared
— т.е. невозможность использования определённого пользователем функтора для удаления объекта — всё потому, что используется другой функтор, который просто вызывает деструктор напрямую, что и следует от использования размещающего new
.
В общем, «грубо» суть вопроса: как использовать(начать использовать) Boost/новые возможности нового стандарта, имея представляния о реализации используемых возможностей? Как Вы, например, начали изучать C++11?
Спасибо.
Автор: Door