ones代码如何访问不同栈帧中的成员变量

How does ones code access member variables in a different stack frame

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 对象的一部分存储在先前堆栈帧中的成员变量?是抄进来的吗?通过引用在下面默默地通过?还是它实际上最终在堆上?或者是否有一些特殊的机制,代码可以通过这种机制访问堆栈中位于它之前的内容?

这个:

   my_foo.do_something(); 

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

do_something内部,代码被视为:

this->foo_member1++;

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