首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >取消引用指向类的成员函数的空指针

取消引用指向类的成员函数的空指针
EN

Stack Overflow用户
提问于 2015-10-13 17:34:48
回答 2查看 59关注 0票数 0

我只是好奇这个程序是如何打印class的func()语句的。

代码语言:javascript
运行
复制
#include <iostream>
using namespace std;
class foo
{
    public:
        void func ()
        {
            cout << "In func" << endl;
        }
    private:
        int a;
};

int main () {
    foo *f1 = NULL;
    f1->func();
}

编译器版本: g++ (Ubuntu/Linaro 4.4.7-1ubuntu2) 4.4.7版权所有(C) 2010自由软件基金会,Inc.

我怎么才能得到方法func()的打印结果呢?

EN

回答 2

Stack Overflow用户

发布于 2015-10-13 17:37:03

取消引用null指针会产生未定义的行为。

我可以猜到为什么这对你仍然有效(但同样是UB!),但是如果你试图访问func()中的成员变量,我很确定它会停止工作。

票数 0
EN

Stack Overflow用户

发布于 2015-10-13 17:37:28

取消引用NULL指针意味着您具有未定义的行为。

然而,在这种情况下,在大多数实现中,您最终会得到正确的函数,thisNULL,调用非虚方法的正常实现是将隐藏参数this设置为指向对象(在本例中为NULL)的指针,然后直接调用函数。

由于您不能访问成员或调用虚函数,也不能以任何其他方式使用this指针做任何有用的事情,所以您非常接近static方法的场景,我建议您在不使用this指针的情况下使用该方法。

对于最基本的情况,除了检查NULL是否正常之外,您不想对this指针做任何其他事情,您仍然可以使用static方法,并显式地将指针传递给对象:

代码语言:javascript
运行
复制
  static void func(foo* diz) {
       cout << "In func" << endl;

       if( diz != NULL ) {
           diz->actual_work_on_diz();
       }
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33099121

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档