Является ли boost :: make_shared устаревшим сейчас? - PullRequest
13 голосов
/ 11 ноября 2009

boost::make_shared устарел сейчас? Не нашли его определения в 1.35.

Ответы [ 3 ]

27 голосов
/ 01 апреля 2012

std::make_shared также доступен в C ++ 11. Обратите внимание, что make_shared - это больше, чем просто удобная функция. Взгляните на следующий фрагмент кода:

make_shared<foobar>(1, 2);
shared_ptr<foobar>(new foobar(1, 2));

Оба оператора создают объект foobar и создают shared_ptr. Тем не менее, первый позволяет избежать выделения памяти для общего счетчика, поскольку для счетчика и объекта foobar будет использоваться один фрагмент памяти. Это невозможно со вторым оператором, поскольку память для foobar выделяется до построения shared_ptr.

Что я хочу сказать: нет, make_shared не устарел, поскольку обеспечивает очень полезную оптимизацию.

12 голосов
/ 11 ноября 2009

В 1,4 документа: http://www.boost.org/doc/libs/1_40_0/libs/smart_ptr/make_shared.html

Похоже, что было добавлено в версии 1.39

2 голосов
/ 01 апреля 2012

Сегодня провел небольшое исследование, и кажется, что make_shared на самом деле был добавлен в 1.36.0 (в 1.35.0 такого заголовка нет), но интересно то, что в разделе Что нового об этом нет ни одного упоминания изменить - по крайней мере, я не мог найти его

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...