this指针:
-
概念:类非静态成员函数的第一个参数,该参数使用指向调用当前函数的对象
-
this指针特性:
a> this指针类型:T* const 普通类型成员函数:T* const,可以修改对象的内容,可以调用普通和const类的成员函数 const类的成员函数:const T* const,this指向不能修改并且指向对象中的内容也不能修改,只能调用const类的成员函数 b> this是非静态成员函数的第一个隐藏参数 隐藏:用户在编写函数时不需要给出this的参数,该参数是由编译器自己维护,调用该函数也不需要手动传递,this指针的传参也是编译器自己进行 c> this指针只存在于正在运行的成员函数中,this指针不会存在于对象中,不会影响类对象的大小 d> 静态成员函数没有this指针 e> this指针的传递:一般情况ecx寄存器(this_call:调用约定),也可以通过参数压栈的方式进行传递
面试题
-
this指针是否可以为空
1.如果成员函数是通过对象的方式进行调用,this指针一定不为空 T ti t.testFunc(); 2.如果成员函数是通过类类型的指针方式进行调用,this指针可能为空: T t; T* pt=&t; pt->testFunc(); pt=nullptr; pt->TestFunc(); 代码可以通过编译,但是在运行期间可能会出现错误: 如果在成员函数中访问任何静态的成员变量,代码一定崩溃,反之一定不会崩溃
-
this指针存哪里
this指针存在栈上
class A { //1.编译没有问题
public: //2.运行时代码奔溃
~A() {
delete this; //1.调用析构函数,清除对象中的资源
} //2.释放指针所指向的堆空间
} 导致无限递归,造成栈溢出的代码崩溃