оптимизация распределения shared_ptr - PullRequest
2 голосов
/ 25 сентября 2010

Где-то я увидел пост об оптимизированном способе создания надстройки shared_ptr, чтобы он одновременно распределял ptr-соединение и соединение. Я сделал SO поиск, но на shared_ptr есть много сообщений, и я не смог его найти. Может кто-нибудь умный, пожалуйста, перепечатайте его

редактировать: Спасибо за ответ. дополнительный кредитный вопрос. Какая правильная (предпочтительная?) Идиома для возврата нулевого shared_ptr? т.е.

FooPtr Func()
{
   if(some_bad_thing)
      return xxx; // null
}

мне

return FooPtr((Foo*)0);

выглядит немного клунки

1 Ответ

6 голосов
/ 25 сентября 2010

См. boost::make_shared():

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

...