所以我今天遇到了一个错误,其中一个 NULL 被传递到构造函数的参数列表中,这导致应用程序中断。奇怪的是编译器没有禁止这种情况发生。由于参数列表发生了变化,直到现在才注意到这个问题。请参阅以下代码片段:
这个对象有3个参数,密切关注std::string&。
class Foo {
public:
std::string myName;
unsigned int someVariable;
void * ptr;
Foo(const std::string& name, void * aPtr, unsigned int variable);
~Foo();
}
Foo::Foo(const std::string& name, void * aPtr, unsigned int variable) : myName(name), ptr(aPtr), someVariable(variable)
{
// object constructed
}
int main(int argc, char* argv[])
{
// construct an instance of Foo
Foo foo(NULL /*whoops, passed in NULL when a string should be passed in*/,
"foo",
0); // program compiles as expected, A NULL pointer runtime error occurs when executed.
}
所以基本上,如果你不小心切换了你的 foo 对象的输入值,编译器不会做任何事情。没有响起警报,程序崩溃时您会摸不着头脑。我认为应该有一种方法可以防止这种情况发生。有什么可以解决这个问题的吗?编译器中有什么东西应该打开吗?