空指针调用成员函数的场景

首先是空指针调用成员函数的场景的完整代码:

//空指针访问成员函数
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;
}

C++中空指针也是可以调用成员函数的,但是也要注意有没有用到this指针,如果用到this指针,需要加以判断保证代码的健壮性
空指针可以调用成员函数,但是如果成员函数中用到了this指针就不可以了,为什么???
原因在于成员函数隐含地通过this指针来访问对象,如果this指针为空,就无法正常完成成员函数的执行。
当对一个空指针调用成员函数时,this指针的值为nullptr。编译器可以允许调用发生,但是实际执行时需要通过this访问对象的数据与函数,这时就会出问题。
例如:

class Person {
  void printName() {
    cout << name << endl; 
  }

  string name;
}

int main() {
  Person* p = nullptr;

  p->printName(); // 错误,空指针无法读取name
}

printName函数需要通过this指针查找name成员,但是此时this==nullptr,无法定位和访问name变量,因此会出错。
所以编译器可能允许调用,但是执行时的Crash是不可避免的。
这就是空指针不能调用涉及this指针的成员函数的根本原因。空指针根本无法定位和访问对象内存。

  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白小白的学习笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值