1

我在 PC-Lint (au-misra-cpp.lnt) 中收到此错误:

ParameterTest.cpp(40):错误 1963:(注意——违反 MISRA C++ 2008 咨询规则 14-8-2,可行集包含函数和模板:std::shared_ptr::shared_ptr(第 499 行,文件 C:\Program文件 (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, module Parameter.cpp)) C:\Program Files (x86)\Microsoft Visual Studio 11.0\VC\include\memory(499):错误 830:(信息 -- 先前消息中引用的位置)std::shared_ptr信息(信息指针);

在此代码上:

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

我尝试以不同的方式编写代码,但找不到不给出上述错误的方法。

是否可以使代码符合 MISRA?

4

1 回答 1

4

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

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

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

于 2013-08-01T14:03:33.003 回答