浅谈this指针

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.释放指针所指向的堆空间
}                        导致无限递归,造成栈溢出的代码崩溃
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页