【发布时间】:2013-08-02 11:57:05
【问题描述】:
我在 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?
【问题讨论】:
-
你试过
std::shared_ptr<CParameterInfo> info(new CParameterInfo());吗?或者更好,auto info = std::make_shared<CParameterInfo>();? -
我想问题在于
std::shared_ptr的构造函数既是模板又不是模板,你对此无能为力。如果我理解正确,恕我直言,这条规则太严格了。 -
@CassioNeri 您可能是对的,这似乎是 shared_ptr 实现中的一个问题,并且它具有具有相同签名的模板和函数,从而使 PC-Lint 显示 MISRA 错误。 Bur 它在使用 make_shared 时有效,所以我会这样做。