Есть ли любые оборотные стороны с использованием make_shared для создания shared_ptr

Есть ли любые оборотные стороны с использованием make_shared() вместо использования shared_ptr(new T).

Состояния документации повышения

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

51
задан Tobias Furuholm 27 January 2010 в 04:31
поделиться

2 ответа

Указатели и выделение памяти

... Я тоже парень C #, и я все еще пытаюсь обернуть голову о правильных практиках памяти в C/C + +.

-121--1469293-

Если вам не нужен криптографически защищенный генератор псевдослучайных чисел, я бы пошел за мерсенновским твистером . Исходный код для C # можно найти здесь и Java .

-121--3366998-

Мне известно как минимум о двух.

  • Вы должны контролировать распределение. Не большой на самом деле, но некоторые старые API, как вернуть указатели, которые вы должны удалить.
  • Пользовательское средство удаления отсутствует. Я не знаю, почему это не поддерживается, но это не так. Это означает, что ваши общие указатели должны использовать удаление ванили.

Довольно слабые точки. так что старайтесь всегда использовать make_shared.

26
ответ дан 7 November 2019 в 10:09
поделиться

В дополнение к пунктам, представленным @deft_code, еще более слабый:

  • Если использовать weak_ptrs, которые живут после того, как все shared_ptrs к данному объекту умерли, то память этого объекта будет жить в памяти вместе с управляющим блоком до тех пор, пока не умрет последний weak_ptr. Другими словами, объект уничтожается, но не деблокируется до тех пор, пока не будет уничтожен последний weak_ptr.
39
ответ дан 7 November 2019 в 10:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: