Я получаю эту ошибку в 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 совместимым?
Я предполагаю, что обход конструктора может сработать:
auto infoPtr = std::make_shared<CParameterInfo>();
Это также имеет преимущество в том, что выполняется только одно выделение памяти, в то время как для отдельного создания объекта и общего состояния потребуется два.
Других решений пока нет …