【C/C++】空指针访问成员函数
C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针。
如果用到this指针,需要加以判断保证代码的健壮性。
示例:
#include <iostream>
#include <string>
using namespace std;//空指针访问成员函数
class Person {
public:void ShowClassName() {cout << "我是Person类!" << endl;}void ShowPerson() {//if (this == NULL) {// return;//}cout << mAge << endl;}public:int mAge;
};void test01()
{Person * p = NULL;p->ShowClassName(); //空指针,可以调用成员函数p->ShowPerson(); //但是如果成员函数中用到了this指针,就不可以了
}int main() {test01();system("pause");return 0;
}
程序运行结果:
因为 p->ShowPerson() 访问了具体的成员变量mAge,却没有告诉函数访问的是哪个对象的mAge,因为C++实际调用的是:
void Person::ShowPerson(Person *this) {cout << this->mAge << endl;
}
相当于:
cout << null->mAge << endl;
p->ShowClassName()
不报错,仅仅是因为,它没有使用this指针,没有歧义。
可以添加对this指针是否为空的判断,增加代码健壮性。
void ShowPerson() {if (this == NULL) {return;}cout << mAge << endl;
}