我在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(line 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?
答案 0 :(得分:4)
我猜测避免构造函数可能会起作用:
auto infoPtr = std::make_shared<CParameterInfo>();
这也有一个优点,即只进行一次内存分配,而单独创建对象和共享状态需要两个。