std::make_unique должны использоваться для построения объектов, принадлежащих std::unique_ptr
std::make_unique должны использоваться для построения объектов, принадлежащих std::unique_ptr.
Вместо выделения памяти при помощи new оператор и преобразование получившегося необработанного указателя в std::unique_ptr объект, для образца:
class numberClass {
public:
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 объект (или boost::unique_ptr объект) от необработанного указателя, возвращенного new оператор.
Если вы ожидаете нарушения правил, но не видите его, обратитесь к разделу «Стандартные нарушения кодирования не отображаются».
| Группа: Библиотека общих утилит |
| Категория: Необходимый, Автоматизированный |