2013-08-01 6 views
1

Я получаю эту ошибку в 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 совместимым?

+3

Вы пробовали 'std :: shared_ptr info (new CParameterInfo());'? Или даже лучше, 'auto info = std :: make_shared ();'? –

+0

Я предполагаю, что проблема заключается в том, что 'std :: shared_ptr' имеет конструкторы, которые являются как шаблонами, так и без шаблонов, и вы ничего не можете с этим поделать. Если я правильно ее понимаю, ИМХО правило слишком строгое. –

+0

@CassioNeri, вероятно, это правильно, кажется, проблема в реализации shared_ptr и что у него есть шаблон и функция с той же сигнатурой, что делает PC-Lint для отображения ошибки MISRA. Bur это работает при использовании make_shared, поэтому я сделаю это. – MathiasWestin

ответ

4

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

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

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

+0

Спасибо, что работает для меня. – MathiasWestin

 Смежные вопросы

  • Нет связанных вопросов^_^