Я получаю эту ошибку в PC-Lint (аи-Мишра-cpp.lnt):Как создать std :: shared_ptr без нарушения консультативного правила MISRA C++ 2008 14-8-2?
ParameterTest.cpp (40): ошибка 1963 (Примечание: - Нарушает MISRA C++ 2008 Advisory Правило 14- 8-2, Жизненный набор содержит как функцию, так и шаблон: std :: shared_ptr :: shared_ptr (строка 499, файл C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ include \ memory, module Параметр .cpp), std :: shared_ptr :: shared_ptr (строка 485, файл C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ VC \ include \ memory, module Parameter.cpp)) C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ V C \ include \ memory (499): ошибка 830: (информация - Место, указанное в предыдущем сообщении) std :: shared_ptr info (infoPtr);
В этом коде:
CParameterInfo* infoPtr = new CParameterInfo();
std::shared_ptr<CParameterInfo> info(infoPtr);
Я попытался написать код по-разному, но не могу найти способ, который не дает ошибку выше.
Возможно ли сделать код MISRA совместимым?
Вы пробовали 'std :: shared_ptr info (new CParameterInfo());'? Или даже лучше, 'auto info = std :: make_shared ();'? –
Я предполагаю, что проблема заключается в том, что 'std :: shared_ptr' имеет конструкторы, которые являются как шаблонами, так и без шаблонов, и вы ничего не можете с этим поделать. Если я правильно ее понимаю, ИМХО правило слишком строгое. –
@CassioNeri, вероятно, это правильно, кажется, проблема в реализации shared_ptr и что у него есть шаблон и функция с той же сигнатурой, что делает PC-Lint для отображения ошибки MISRA. Bur это работает при использовании make_shared, поэтому я сделаю это. – MathiasWestin