我在PC - 皮棉(AU-MISRA-cpp.lnt)收到此錯誤:如何在不違反MISRA C++ 2008諮詢規則14-8-2的情況下創建std :: shared_ptr?
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,模塊參數.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 \ V C \ include \ memory(499):error 830: (Info - 先前消息中引用的位置) std :: shared_ptr info(infoPtr);
在此代碼:
CParameterInfo* infoPtr = new CParameterInfo();
std::shared_ptr<CParameterInfo> info(infoPtr);
我試着寫以不同的方式的代碼,但不能找到一種方式,不給上述錯誤。
是否可以使代碼MISRA兼容?
你試過'std :: shared_ptr信息(新CParameterInfo());'?甚至更好,'auto info = std :: make_shared ();'? –
我想問題是'std :: shared_ptr'具有既是模板又沒有模板的構造函數,你無法做任何事情。如果我理解正確,恕我直言,規則太嚴格。 –
@CassioNeri你可能是正確的,它似乎是在執行shared_ptr的問題,並且它具有相同簽名的模板和函數,使PC-Lint顯示MISRA錯誤。 Bur使用make_shared時有效,所以我會這麼做。 – MathiasWestin