станд:: должен использоваться, чтобы создать объекты, принадлежавшие станд.:: shared_ptr.
станд:: должен использоваться, чтобы создать объекты, принадлежавшие станд.:: shared_ptr.
Вместо того, чтобы выделить память при помощи new
оператор и преобразование получившегося необработанного указателя на std::shared_ptr
объект, например:
class numberClass { numberClass(int n): number(n){} private: int number; } int aNumber=1; std::shared_ptr<numberClass> numberPtr (new numberClass(aNumber));
std::shared_ptr
возразите непосредственно использованию использования std::make_shared
функция. Например:auto numberPtr = std::make_shared<Number>(aNumber);
Используя std::make_shared
предпочтен потому что:
Создание std::shared_ptr
объект выполняется в одном динамическом выделении памяти и улучшает производительность во время выполнения. В противном случае, создавая необработанный указатель при помощи new
оператор требует одного динамического выделения памяти и преобразования необработанного указателя на std::shared_ptr
объект требует второго выделения. Второе выделение создает блок управления, который отслеживает подсчет ссылок совместно используемого ресурса и делает std::shared_ptr
объект, знающий обо всех указателях на совместно используемый ресурс.
Создание std::shared_ptr
объект с помощью std::make_shared
безопасно от исключения. В противном случае исключение может находиться между динамическим выделением памяти с new
оператор и последующее преобразование, ведя к утечке памяти. Исключение вызывает утечку памяти только в определенных контекстах, например, когда std::shared_ptr
объект создается в аргументе функции мультипараметра, и другая оценка аргумента функции выдает исключение.
Можно использовать более краткий синтаксис. Вы не должны повторять тип данных объекта, который динамически выделяется.
Средство проверки отмечает создание std::shared_ptr
объект от необработанного указателя, возвращенного new
оператор.
Если вы ожидаете нарушение правила, но не видите его, обратитесь к Кодированию Стандартных Нарушений, Не Отображенных.
Группа: Общая сервисная библиотека |
Категория: необходимый, автоматизированный |