【发布时间】:2011-03-16 12:05:12
【问题描述】:
我最近遇到了以下代码:
class Foo
{
public:
void bar();
// .. other stuff
};
void Foo::bar()
{
if(!this) {
// .. do some stuff without accessing any data members
return;
}
// .. do normal actions using data members
}
代码可以编译,因为在 C++ 中,方法只是隐式传递“this”指针的函数,并且可以像任何其他指针一样检查“this”是否为 NULL。显然,即使它没有崩溃,这段代码也是令人困惑和不好的做法;在调试器中单步执行代码会很混乱,看到一个 NULL 指针即将调用一个方法,然后看不到预期的崩溃。我的问题是:调用 SomeFooPtr->bar() where SomeFooPtr == NULL 是否违反 C++ 标准?
在我看来,这可能不是因为用户定义的 operator-> 返回了一个指针,这意味着即使该指针为 NULL,它也绝对没有被取消引用(我确定取消引用 NULL 指针被标准为非法或未定义)。另一方面,原始指针的语义不一定必须与用户定义指针的语义相匹配——也许它们上的 operator-> 被认为是取消引用,即使编译器不会生成一个。
【问题讨论】:
标签: c++ pointers null methods standards