这是最小示例,在 Visual Studio 2019 中开始代码分析
#include <sal.h>
class CTest
{
public:
virtual void A() = 0;
virtual void B() const = 0;
_Check_return_ _Ret_maybenull_ static CTest* GetInstance()
{
return (CTest*)0;
}
};
void Test2()
{
auto a = CTest::GetInstance();
a->A(); // no warning ?
auto b = CTest::GetInstance();
b->B(); // warning C6011
}
为什么 C6011 警告只对调用空类指针的 const 成员函数起作用。但不是非常量成员函数?显然这两个代码都会崩溃。