空指针可以调用成员函数?

来源:互联网 发布:莫知我哀上一句 编辑:程序博客网 时间:2024/06/05 07:49

有下面一个简单类:

class A{public:    void fun(){        cout << "I'm class A"<<endl;    }};

用一个空指针调用上面的fun函数:

A* pa = NULL;pa->fun();

讲道理,空指针应当是”不可用”的,自然也不能调用其成员函数了,但是结果却出乎意料地正确执行了:
这里写图片描述

为什么??其实,关键在于每个成员函数的this指针。
其实,c++类的成员函数与传统c的函数并没有什么不同,只是成员函数的第1个参数必须是this指针,只是这个参数是由编译器自动加上去的,调用时也不需要显示传递。

所以,上面的class A的成员函数fun的本质其实是这样子的:

void fun(A* this){        cout << "I'm class A"<<endl;    }

而调用是其实这样子的:

A* pa = NULL;fun(pa);

可以看到,虽然this指针实参为NULL,但是fun函数根本没有用到this指针啊,this在这里只是打了个酱油而已!

但是,如果在成员函数中使用的成员变量,就不可避免要使用到this指针,若是这样,就不可避免的出现崩溃了。

综上所述:即便对象指针为NULL,只要成员函数没有使用非静态成员函数,就可以正常调用该成员函数。

0 0
原创粉丝点击