关于 this 指针
1)this指针的本质是一个函数参数,只能在成员函数中使用,全局函数,静态函数都不能使用。
class A{
public:
int func(int p){};
}
其中func的实际表示形式为int func(A* const this,int p);
2)this指针并不占用对象的空间
this相当于非静态成员函数的一个隐含的参数,不占用对象空间
3)this指针什么时候创建
this在成员函数的开始执行前构造,在成员的执行结束后清除。
4)this指针存放在何处?
this指针会因为编译器不同而有不同的放置位置。可能是堆,栈,也可能是寄存器。
语法上,this是一个指向对象的“常指针”,因此无法改变。它是一个指向相应对象的指针。所有对象共用的成员函数利用这个指针区别不同变量。
实际应用的时候,this是一个寄存器参数,不是语言所规定的。
5)this指针如何传递给类中的函数?
编译器通过ecx寄存器传递this指针,一般编译器都会遵从一直的传参规则,不同编译器产生的obj就无法匹配了。