这个问题已经在这里有一个答案:
- 它是法律/定义良好的C ++调用不通过一个空指针访问成员非静态方法? 5个回答
- 什么时候对空实例调用的成员函数导致未定义的行为? 2个回答
我可以从一个空指针调用类的非静态,非虚方法? 然后,成员函数请将此== nullptr测试,并立即返回,如果这是真的。
我知道它会在大多数情况下,但是这是有保证的结果呢? 这样的话,我可以保证空指针异常从未发生过,并且避免在主叫用户代码的很多地方空指针测试。 这对于紧凑,我不打算这样做的权利,但我很好奇,想知道是否有标准将保证这个工作...
谢谢!
解引用一个nullptr
是不确定的行为 。 期!
无论是工作还是不能在一个特定的实现是无关紧要的,行为是不能保证。
标准expliticly提到取消引用NULL指针未定义行为。 使用opearator - >取消引用指针到左。
所以你只有在情况还好吧,如果你的实现定义一些行为的情况下,因为它是一种可能性(虽然我从来没有在现实生活中遇到它尚未)。
(我希望你明白,观察到的东西是不一样的被定义。)
始终避免调用一个空指针,你通常会用一个核心转储结束
这里有一些很有意思的答案: 什么时候在一个空实例导致不确定的行为调用成员函数?
此外,该标准没有给出关于该机制成员调用虚函数的提示。 它通常被刚好路过“这个”作为一个隐藏的功能参数完成,这在实践中不取消引用指针和工作。 然而,似乎可以实现,甚至有虚表,在这种情况下会崩溃的非虚拟函数。
有趣的是,微软功能依赖于这种行为:) http://msdn.microsoft.com/en-us/library/d64ehwhz%28v=vs.80%29.aspx
文章来源: C++ Call a non-virtual non-static method from a null pointer, without accessing members : is this guaranteed to work? [duplicate]