关于C++this指针

本文章主要是对this指针的讨论

1、this指针所占的内存

总所周知,指针类型在C++/C中占据的内存是四个字节,那么this作为一个指针,是否也是占用四个字节呢,此时定义一个类对象有一个int类型的值,如果this指针也占据类内的空间,那么sizeof(class)就是8,但是如果去写的话就会发现,此时类的size是4,所以this指针是不占据类对象的内存的

2、this指针的指向

那么肯定会好奇,this作为一个指针,他到底的指向是什么呢,哈哈,其实大家应该都知道,指向的肯定是当前类的空间,不然怎么去访问类内的成员呢。但是此时需要注意,this指针不是额外开辟的一块空间去指向类内的对象,而是和当前类对象是一个地址。例如当前实例化一个类对象为Student s,此时在类内部调用一个函数cout<<this;和类外部cout<<&s;得出的结果是一样的,说明两者就是一个,this指针所指向的空间就是当前实例化类的空间 。所以就可以这样子理解,这里其实就相当于类中每定义一个成员方法,例如void print(){cout<<1;},此时的成员方法同样可以写(理解)为 void print(Student * this){cout<<1;},此时表示成员方法默认传入了一个参数this,也就是实例化对象的s = *this。这个和python的类非常像,不过python传入的参数是self,即不论什么函数都需要传入一个self参数,但是静态函数应该不用传(这个我也不是很清楚,在这里就不做讨论,如果有读者有兴趣的可以自己去查)

3、在静态成员方法中不能使用this指针 

其实这个很好理解,就像上面说的,this指针会在成员方法定义的时候作为参数传入方法中,而类对象可以不需要实例化直接访问静态成员方法,即Student::fun();。如果此时需要传入指针的话,那么传入的是什么指针呢?所以这里就有矛盾,故静态成员方法不可以使用this指针

 4、为什么设计this指针

我个人认为是在函数使用的时候更好的去区分传入的变量以及返回自身,就像std::的命名空间一样,万一传入成员方法的参数和类中的属性重复了,那么就会报错,此时就需要用this指针来指向当前的属性来进行区分,还有就是看网上说的C++对象模型这本书说的比较清楚,如果有想了解的话可以去深入

 以上想法仅限个人,如果大家有更好的思路以及想法,需要改错纠正,欢迎大家指正交流,谢谢大家

  • 8
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值