c++之this指针

匿名 (未验证) 提交于 2019-12-03 00:29:01

场景:构造一个A类对象a,当a要调用A类中成员函数时,需要传参,但是却没有像c语言中那样,显式的指定对哪个“目标”进行操作;但结果依然是我们想要的,这是如何做到的呢?
实际上:C++中的成员函数也是按照C类似方式进行处理的,即:成员函
数实际也有一个隐藏指针,指向了调用该函数的对象本身,即this指针

**this是一个指针,它时时刻刻指向这个实例** 

this指针特性:
①this指针的类型:类类型* const,即不能在类成员函数中修改this的指向
②this指针并不是对象本身的一部分,不影响sizeof的结果
③this的作用域在类”成员函数”的内部
④this指针是”类成员函数”的第一个默认隐含参数,编译器自动维护
传递,类编写者不能显式传递
⑤只有在类的 非静态 成员函数中才可以使用this指针,其它任何函数都
不可以

__thiscall调用约定:

__thiscall只能够用在类的成员函数上
参数从右向左压栈
如果参数个数确定,this指针通过ecx传递给被调用者;如果参数不
确定(_cdecl),this指针在所有参数被压栈后压入堆栈
对参数个数不定的,调用者清理堆栈,否则函数自己清理堆栈

this指针是什么时候创建的?

为什么叫this指针,而不是引用呢?

this指针存放于何处?堆、栈、全局变量还是其他地方?

this指针是如何访问类中的变量的?

为什么this指针不能再静态函数中使用?

我们只有获得一个对象后,才能通过对象使用this指针,如果我们知道一个对象this指针的位置,能否直接使用?

每个类编译后,是否创建一个类中函数表来保存函数指针,以便来调用函数

this指针如何传递给类中函数的?绑定?还是在函数参数的首参数就是this指针?

this指针有没有可能为NULL呢?
有可能,例如下面代码

class CTest { public:     void FunTest()     {} }; void FunTest() {     CTest* pt = NULL;     pt->FunTest();        //代码有问题,会死循环,导致堆栈溢出;但是这样,this确实有肯能为NULL }
文章来源: c++之this指针
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!