场景:构造一个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 }