设为首页 加入收藏

TOP

C++基础之详解this指针(有,或者没有,这不是个问题)
2015-07-20 17:26:30 来源: 作者: 【 】 浏览:4
Tags:基础 详解 this 指针 或者 没有 不是 问题

这两天我发现,带着问题更能清楚的了解一个东西,问题越细越多,就会了解的很透彻,根本不需要记忆,现在想想摆脱了死记硬背有多舒服

问题1:this指针指针是什么?

问题2:为什么这个指针叫this?

问题3:this指针指针是干嘛的?

问题4:this指针有没有空间?如果有,在哪里?

问题5:this指针是在哪里用的?

问题6:this指针的实现机制是什么?

遗留1:暂时先当做是叫做this的一个指针(需要下面的问题铺垫才能知道)

遗留2:(需要下面的问题铺垫才能知道)

解决3:类里的成员变量或者是成员函数的调用方式是this调用,意思是用本类的对象调用,this指针相当于是本类的对象

解决4:指针是有空间的,更何况我在解决3里说this就是本类对象(解决3说的是相当于,你这里说的是“就是”,冲突啊),对象是类的实例化,怎么会没空间,空间再哪--------------呢?new出来的对象,this的空间再堆上,直接建的对象,this的空间在栈上

解决5:this是本类的对象,在类里面出没,在类里面使用成员变量或者成员函数,可以直接用,前面略写了一个this,可写可不写,你也可以自己加上,例如vcrHxtXNqLX308OjrM7S1rvE3LDRdGhpc7Srtb3P37PMu9i197qvyv3A78PmwLTKudPDs8nUsbqvyv08L3A+CjxwPr3ivvY2o7q94s72wb23+bvjseDNvKOsx7DM4aOsZnVuKCm6zWG2vMrHRktPbmW1xLPJ1LE8L3A+CjxwPjxpbWcgc3JjPQ=="https://www.cppentry.com/upload_files/article/49/1_wfkhe__.png" alt="\">

图一,01351047看到了this,图二是在反汇编里取消了显示符号名,可以看得到出this是ebp-4

1.建了这个类的对象,开辟空间,esp的位置就是对象地址的末尾,这个类有一个成员变量,那这样esp的位置是这个成员变量的后面,也就是这个对象首地址+4个字节后面

2.01351041把esp的值给ebp

3.ebp-4就是这个类的对象的首地址,说明了所谓的this就是对象的首地址,也说明了调成员变量或函数都是通过对象首地址(这里可以看得出this的功能和是个什么,继续深入)

4.我说this是假的,根本没有这个this指针,我在汇编上看不到指针这个东西,看到的就是ebp-4而已------------没有this这个东西

5.我说this是真的,指针的存在就是保存的东西以地址来解释,ebp-4不就是对象的地址,01351047可以看得出把对象的首地址放到eax寄存器中,那这个时候eax里面是对象的首地址,eax不是就是一个指针(这里说到了this的实现机制,就是把对象的地址放在寄存器里,然后使用寄存器来找成员函数或者成员变量,根本没有this这个东西,但我5里也说有这个东西,看到这,不知道你有没有看明白,我这篇文章标题的意思,这里也解决了遗留的1和遗留的2,遗留2,this英文解释就是这个类里才能使用,也解决了我上面为什么说相当于)--------有this这个东西

(PanPen120原创,如有建议,轻留言)

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇HDU 1016-Prime Ring Problem(DF.. 下一篇Codeforces Round #273 (Div. 2)

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·Python爬虫教程(从 (2025-12-26 16:49:14)
·【全269集】B站最详 (2025-12-26 16:49:11)
·Python爬虫详解:原 (2025-12-26 16:49:09)
·Spring Boot Java: (2025-12-26 16:20:19)
·Spring BootでHello (2025-12-26 16:20:15)