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