C++ this指针的一些概念

什么是this指针?

this指针表示对象所在内存的地址,是地址,不是指向该地址的指针!

this指针是作为类的隐藏变量成员存储在类中的吗?

 不是!this指针绝对不占类内存的一点空间,如果this指针在内存内,那么在内存里面表示自己内存的地址,要访问该内存,需要先去内存里找到该内存的地址?是不是有点套娃的感觉?this指针是编译器管理的!

this指针是什么时候创建的?

这个命题很抽象,this指针并不是一个物理的对象,而是编译器的一种行为,先说说现象。

在一般我们的开发中,this指针表示的地址,是在使用new操作符时,自动生成的,如果想要可视化这个细节,请看下面的代码,不了解operator new的可以先去了解一下,类似于C语言中的malloc,new的底层也是对operator new进行了封装,并且增加了一个自动调用构造函数的过程。

下面的代码可以看到,t是一个创建在栈上的变量,在创建了内存后,t指向了一个分配的堆内存地址,而这个堆内存地址,刚好就是this指针的地址!所以this指针,表示的就是当前对象所在内存中的地址!

再补充一点,this指针并不作为一个物理的对象,被存储或者被创建,而是在需要被调用的时候(比如构造函数,或者访问非静态成员),编译器就会把this指针的地址传给该函数,所以this指针是编译器管理类中一些调用的行为。

推荐一个自己写的C++秋招项目(mini stl),如果你学完该项目,对C++的理解跟应用能力绝对会提高一大截!GitHub - yxc-s/MiniCppSTL: Cpper's homeland

class Test{
public:
    Test(){}
    void print_this(){
        cout <<"this address: " <<  (this) << endl;
    }
};


void main() {
    Test* t = static_cast<Test*> (::operator new (sizeof(Test)));
    new (t) Test();
    cout << "stack address: " << (&t) << endl;
    cout << "pointer address: " << t << endl;
    t->print_this() ;
}

stack address: 0x76bddffc58
pointer address: 0x1ff2dcecc70
this address: 0x1ff2dcecc70   

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值