Как создать std :: shared_ptr, не нарушая Правило 14-8-2 MISRA C ++ 2008?

Я получаю эту ошибку в PC-Lint (au-misra-cpp.lnt):

ParameterTest.cpp (40): ошибка 1963: (Примечание — нарушает MISRA C ++ 2008
Консультативное правило 14-8-2, Жизнеспособный набор содержит как функцию, так и шаблон
:
std :: shared_ptr :: shared_ptr (строка
499, файл C: \ Program Files (x86) \ Microsoft Visual Studio
11.0 \ VC \ include \ memory, модуль Parameter.cpp), std :: shared_ptr :: shared_ptr (строка
485, файл C: \ Program Files (x86) \ Microsoft Visual Studio
11.0 \ VC \ include \ memory, модуль Parameter.cpp)) C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ include \ memory (499): ошибка 830:
(Информация — Местоположение процитировано в предыдущем сообщении)
std :: shared_ptr info (infoPtr);

По этому коду:

CParameterInfo* infoPtr = new CParameterInfo();
std::shared_ptr<CParameterInfo> info(infoPtr);

Я пытался написать код по-разному, но не могу найти способ, который не дает ошибку выше.

Можно ли сделать код MISRA совместимым?

1

Решение

Я предполагаю, что обход конструктора может сработать:

auto infoPtr = std::make_shared<CParameterInfo>();

Это также имеет преимущество в том, что выполняется только одно выделение памяти, в то время как для отдельного создания объекта и общего состояния потребуется два.

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]