一个人如何编码访问不同堆栈框架中的成员变量

时间:2019-03-17 19:56:38

标签: c++ heap-memory member-variables stack-memory

class foo {
  public:
    foo() : foo_member1(1)
    int foo_member1;
    void do_something() {foo_member1++;}
}

int main(){
    foo my_foo;
    my_foo.do_something();
}

上面的示例代码中所有内容都存储在哪里?这是我开车回家时想到的事情,感到尴尬的是我无法确定答案。 我创建了一个在堆栈上都包含变量的对象。当我调用do_something并输入一个新的堆栈框架时,它如何访问作为my_foo对象一部分存储在上一个堆栈框架中的成员变量?它被复制了吗?在引用之下默默地经过?还是实际上最终会出现在堆上?还是有某种特殊的机制可以使代码访问堆栈中位于其之前的内容?

1 个答案:

答案 0 :(得分:0)

此:

   my_foo.do_something(); 

通过传递隐藏参数foo::do_something()来调用方法this = &my_foo。这只是一个普通的C函数,仅获取一个隐藏参数。 do_something的代码并没有真正访问main的堆栈帧,只是使用了this传递的main

do_something内,代码被视为:

this->foo_member1++;

无跨框架访问。它只是指向存储位置的指针,恰好在main的框架中。在函数之间传递指针时没有内存保护。