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

时间:2013-08-01 13:57:22

标签: c++ misra

我在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,模块Para​​meter.cpp),std :: shared_ptr :: shared_ptr(line   485,文件C:\ Program Files(x86)\ Microsoft Visual Studio   11.0 \ VC \ include \ memory,模块Para​​meter.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?

1 个答案:

答案 0 :(得分:4)

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

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

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