取消对类的成员函数的NULL指针

这个问题在这里已经有了答案:

  • 通过NULL类指针调用类方法

  • 解引用空指针会产生未定义的行为。

    我可以猜测为什么这仍然适用于你(但它又是UB!),但如果你尝试访问func()的成员变量,我很确定它会停止工作。


    解引用NULL指针意味着你有未定义的行为。

    然而,在这种情况下,在大多数实施方式中,你将与正确的函数结束this之中NULL ,正常执行主叫非虚拟方法的是设置隐藏参数this为的指针的对象(在这种情况下, NULL )和然后调用该函数。 如果您不访问成员变量或调用虚拟方法,则在大多数实现中应该没问题。

    既然你不能访问成员或者调用虚拟函数,或者以任何其他方式做this指针的任何有用的事情,那么你已经非常接近static方法的场景,并且我会建议使用它,而不是使用this指针。

    对于你希望能够用this指针做别的事情而不是检查NULL的角落情况,你仍然可以使用static方法,并明确地将指针传递给对象:

      static void func(foo* diz) {
           cout << "In func" << endl;
    
           if( diz != NULL ) {
               diz->actual_work_on_diz();
           }
      }
    
    链接地址: http://www.djcxy.com/p/49709.html

    上一篇: Dereferncing NULL pointer to member function of class

    下一篇: Strange crash at runtime