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
相关产品推荐
相关产品推荐

