C++ 对象的 this指针是否占用内存?

不占用内存,this相当于非静态成员函数的一个隐函的参数,不占对象的空间。它跟对象之间没有包含关系,只是当前调用函数的对象被它指向而已。

所有成员函数的参数,不管是不是隐含的,都不会占用对象的空间,只会占用参数传递时的栈空间,或者直接占用一个寄存器。
看如下代码:

stuct A
{
    char c;
};

int main()
{
    cout << sizeof(A) << endl; // 1
}

结构体 A 的大小 == sizeof(char),这个类里根本就没有地方再给你存个指针。对于存在有虚函数的类,倒是会多一个指针域,但是那个存的是指向虚表的指针,也不是 this。this 指针的本质只是类的非静态成员函数的一个隐含参数,所以不会占用对象本身的空间。这有点像 Python 里的那个 self,只不过 Python 的风格是必须显式地写出这个 self,而 C++ 不需要而已。这个 this 是在执行 a.f(0) 这一句时传给 f 成员函数的。而在几个常见的 x64 ABI 规范里,这个参数甚至都是走寄存器传的,连压栈都不需要。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值