我有一个涉及不同类类型的对象的应用程序。对象由指针引用。空指针表示关联的对象不存在。目前调用代码很麻烦,因为每次使用指向对象的指针时,都会测试指针值是否为空,并采取一些适当的操作来判断是否为空。因为在不存在的情况下要采取的默认操作取决于对象的类型,所以我更愿意将其编码在对象本身的类中,而不是在调用程序中。这会产生如下结构:
class C
{ ...
void member_func() //non-virtual !
{ if (this) { do something with the object ... }
else { take some default action }
}
...
};
显然成员函数不能是虚的,因为当对象不存在时查找表也不存在,虚调用就会失败。但是这段代码对于非虚拟成员函数来说是合法的 C++ 吗?对于我尝试过的编译器来说,它似乎可以正常工作,但我担心可能的不可移植性。在标准中我找不到明确允许或明确禁止此类结构的条款。
this
在成员函数中永远不会为空,因此您执行的检查是无用的。
正如 Matthieu M. 在评论中指出的,如果您在代码中执行以下操作:
C* c = 0;
c->member();
这会导致未定义的行为那就是bad.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)