浅谈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.释放指针所指向的堆空间
}                        导致无限递归,造成栈溢出的代码崩溃
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值