C++的This详解

本文详细解释了C++中this指针的作用,包括如何传递不同类对象的实例、this指针的位置(栈区),以及为何即使对象为空指针调用成员函数也可能不会出错。特别强调了成员函数调用时对this指针的依赖性及其在空指针情况下的处理方式。
摘要由CSDN通过智能技术生成

目录

听说点赞的UU会有好运哦!

听说点赞的UU会有好运哦!

听说点赞的UU会有好运哦!

this指针:

面试常考this:

特别注意:


this指针:

类不保存成员函数,而是放在公共代码段(为什么?答案在C++类详解-CSDN博客
那么,问题来了:
既然是同一个函数,按理说执行结果应该都是一样的
那么它是怎么做到不同的类对象执行不同的成员函数呢?
使用this指针
当对象1调用函数f()时,传参为f(&对象1)
当对象2调用函数f()时,传参为f(&对象2)
...
以此类推
而这个传参,是不是每一次都是我们自己来传呢?
不是,而是编译其来完成
用this指针
这个this就是当前类的指针
注意:
1、形参和实参的位置,我们不能显示写出来
2、在函数内部可以使用
f(const classname* const this){}

面试常考this:


this在那个区?
1、堆 (malloc)
2、栈(局部变量、形参)
3、静态区(static、全局变量)
4、常量区(const不在常量区,const修饰的是后面的对象)
5、对象内(成员变量)

所以,this是在栈区,因为this是一个形参

如果对象为空指针,但是却要调用对象的成员函数,如果这个成员函数没有对这个对象进行解引用,那就不会出错
只不过是对象的成员函数的参数this为空指针而已,我传一个空指针有问题吗?没有任何问题
但是,如果这个成员函数对this进行了解引用,就会出问题,出现空指针解引用的问题

例如下图中,创建了一个A类的对象,并且初始化为nullptr,同时对空指针进行了解引用,按道理来说,应该会出错才对,但是并没有,就是因为根本就没有用到这个空指针,所以也就不会进行解引用,而且,我们在编译阶段call的函数地址都是一样的,也再一次证明类的成员函数没有存储在类内部


特别注意:


因为对象的成员函数不是在对象内部的
所以,当要调成员函数的时候,并不需要用类的对象去进行调用
所以,即使是类的对象是一个空指针,也不会对这个空指针进行解引用
为什么?
因为,对象的成员函数的调用只需要一个this指针作为成员函数的参数
而这个this指针指向的是对象
那么,请问,我传参
是否在乎这个参数是空指针,还是非空指针呢?
不在乎
谁在乎?
只有成员函数内部是否需要对this进行解引用的时候才有关系


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

二十5画生

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

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

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

打赏作者

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

抵扣说明:

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

余额充值