【发布时间】:2013-01-08 14:58:03
【问题描述】:
我有一个涉及不同类类型对象的应用程序。对象由指针引用。空指针表示关联对象不存在。目前调用代码比较繁琐,因为每次使用指向对象的指针时,都会测试指针值是否为空,并采取适当的措施使其为空。因为在不存在的情况下要采取的默认操作取决于对象的类型,所以我更愿意在对象本身的类中而不是在调用程序中对其进行编码。这会产生如下结构:
class C
{ ...
void member_func() //non-virtual !
{ if (this) { do something with the object ... }
else { take some default action }
}
...
};
显然成员函数不能是虚函数,因为当对象不存在时查找表也不存在,虚调用就会失败。但是这段代码对于非虚拟成员函数来说是合法的 C++ 吗?对于我尝试过的编译器,它似乎可以正常工作,但我担心可能的不可移植性。在标准中,我找不到明确允许或明确禁止此类结构的条款。
【问题讨论】:
-
合法吗?当然……定义清楚?不太确定。
-
@StoryTeller:在空指针上调用成员函数是未定义的行为,所以答案是定义不明确。