C++ 如何在不违反MISRA C+的情况下创建std::shared_ptr+;2008年咨询规则14-8-2?

C++ 如何在不违反MISRA C+的情况下创建std::shared_ptr+;2008年咨询规则14-8-2?,c++,misra,C++,Misra,我在PC Lint(au misra cpp.lnt)中得到这个错误: 参数测试.CPP(40):错误1963:(注释)违反MISRA C++ 2008 咨询规则14-8-2,可行集包含函数和模板: std::shared_ptr::shared_ptr(第行) 499,文件C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\memory,module Parameter.cpp),std::shared\u ptr::sha

我在PC Lint(au misra cpp.lnt)中得到这个错误:

参数测试.CPP(40):<强>错误1963:(注释)违反MISRA C++ 2008 咨询规则14-8-2,可行集包含函数和模板: std::shared_ptr::shared_ptr(第行) 499,文件C:\ProgramFiles(x86)\Microsoft Visual Studio 11.0\VC\include\memory,module Parameter.cpp),std::shared\u ptr::shared\u 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\VC\include\memory(499):错误830: (信息——先前信息中引用的位置) std::共享的ptr信息(infoPtr)

关于此代码:

CParameterInfo* infoPtr = new CParameterInfo();
std::shared_ptr<CParameterInfo> info(infoPtr);
cpParameterInfo*infoPtr=new cpParameterInfo();
std::共享的ptr信息(infoPtr);
我尝试过用不同的方法编写代码,但找不到一种不给出上述错误的方法


有可能使代码符合MISRA吗?

我想避免使用构造函数可能会起作用:

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

这还有一个优点,即只进行一次内存分配,而单独创建对象和共享状态则需要两次。我想避免使用构造函数可能是可行的:

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

这还有一个优点,即只进行一次内存分配,而单独创建对象和共享状态需要两次。

您是否尝试过
std::shared_ptr info(new CParameterInfo())?或者更好,
auto-info=std::make_shared()?我想问题在于
std::shared\u ptr
的构造函数既有模板又没有模板,您对此无能为力。如果我理解正确,那么这条规则太严格了。@Cassineri您可能是对的,这似乎是shared_ptr实现中的一个问题,它有一个具有相同签名的模板和函数,使得PC Lint显示MISRA错误。但是它在使用make_shared时有效,所以我会这样做。您是否尝试过
std::shared_ptr info(new CParameterInfo())?或者更好,
auto-info=std::make_shared()?我想问题在于
std::shared\u ptr
的构造函数既有模板又没有模板,您对此无能为力。如果我理解正确,那么这条规则太严格了。@Cassineri您可能是对的,这似乎是shared_ptr实现中的一个问题,它有一个具有相同签名的模板和函数,使得PC Lint显示MISRA错误。但是它在使用make_shared时有效,所以我会这样做。