You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++类成员函数内创建的对象与变量存储位置咨询

成员函数内局部对象与参数的存储位置问题

已知类的数据成员随对象创建而存储(每个对象拥有唯一的数据成员),成员函数作为代码存储在代码段中,且为所有对象共享。现提出疑问:成员函数内创建的对象和变量存储在何处?

示例代码如下:

class A
{
int a,b;
public:
void foo(int x,int y)
{
a=x;
b=y;
A obj_1;
}
};

int main()
{
A obj;
obj.foo(1,2);
return 0;
}

上述示例中,成员函数foo内创建的obj_1对象以及参数x、y,和调用对象obj的存储位置完全无关,它们都存储在**栈(Stack)**中:

  • 当调用obj.foo(1,2)时,程序会为这个函数调用分配独立的栈帧,参数x、y会被放入这个栈帧,函数执行过程中创建的局部对象obj_1也会存放在该栈帧内。
  • 调用对象obj是在main函数的栈帧里创建的,和foo函数的栈帧是两块完全独立的栈内存区域。
  • 当foo函数执行完毕,它的栈帧会被销毁,x、y和obj_1都会被释放;而main函数中的obj要等main执行结束后才会被销毁。

简单来说:类成员函数的代码存在代码段,但函数执行时产生的局部数据(参数、局部对象、临时变量)都是随函数调用在栈上临时分配的,和所属类的对象存储位置没有绑定关系。

内容的提问来源于stack exchange,提问作者user18127073

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 11:45:32