new
or make_unique
instead of more
efficient make_shared
Используя new
или make_unique
инициализировать или сбросить shared_ptr
результаты в дополнительном выделении памяти
Этот дефект происходит, когда вы используете:
new
или make_unique
инициализировать shared_ptr
экземпляр. Например:
std::shared_ptr<T> p1(new T()); std::shared_ptr<T> p2(make_unique<T>());
new
сбрасывать shared_ptr
экземпляр. Например:
std::shared_ptr<T> p1;
//...
p1.reset(new T);
Вы используете shared_ptr
экземпляры, когда это необходимо, несколько интеллектуальных указателей, чтобы владеть и управлять тем же объектом. Экземпляры также совместно используют блок управления, который содержит количество количества экземпляров, которые владеют управляемым объектом.
Polyspace® не отмечает использование new
инициализировать shared_ptr
экземпляр в частных или защищенных конструкторах. Например, никакой дефект не повышен на использовании new
в этом фрагменте кода:
class PrivateCTor { public: static std::shared_ptr<PrivateCTor> makeOne() { return std::shared_ptr<PrivateCTor>(new PrivateCTor); } private: PrivateCTor(); };
Когда вы используете new
или make_unique
инициализировать shared_ptr
экземпляр, операция дополнительных ассигнований создает устройство хранения данных для блока управления. Адрес дополнительных ассигнований может быть в различной странице памяти или возле кэша данных по сравнению с адресом управляемого объекта.
Используйте std::make_shared
инициализировать shared_ptr
экземпляр. Функция выполняет одну операцию выделения с достаточной памятью, чтобы хранить управляемый объект и блок управления.
Повышения производительности могут варьироваться на основе компилятора, реализации библиотеки и среды, которую вы используете.
Группа: Производительность |
Язык: C++ |
Значение по умолчанию: Off |
Синтаксис командной строки:
MISSING_MAKE_SHARED |
Удар: низко |
AUTOSAR C++14 Rule A18-5-2
| AUTOSAR C++14 Rule A20-8-6
| Find defects (-checkers)