C++ 代码如何访问不同堆栈框架中的成员变量

C++ 代码如何访问不同堆栈框架中的成员变量,c++,heap-memory,member-variables,stack-memory,C++,Heap Memory,Member Variables,Stack Memory,上面示例代码中的所有内容都存储在哪里?这是我开车回家时想到的事情,我感到很尴尬,因为我不能肯定地回答。 我在堆栈上创建了一个包含变量的对象。当我调用do_something并输入一个新的堆栈框架时,它如何访问作为my_foo对象的一部分存储在上一个堆栈框架中的成员变量?是抄进来的吗?通过引用在下面默默地传递?或者它真的会被堆起来吗?或者,是否存在某种特殊机制,通过这种机制,代码可以访问堆栈中位于它前面的内容?这是: class foo { public: foo() : foo_me

上面示例代码中的所有内容都存储在哪里?这是我开车回家时想到的事情,我感到很尴尬,因为我不能肯定地回答。 我在堆栈上创建了一个包含变量的对象。当我调用do_something并输入一个新的堆栈框架时,它如何访问作为my_foo对象的一部分存储在上一个堆栈框架中的成员变量?是抄进来的吗?通过引用在下面默默地传递?或者它真的会被堆起来吗?或者,是否存在某种特殊机制,通过这种机制,代码可以访问堆栈中位于它前面的内容?

这是:

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

int main(){
    foo my_foo;
    my_foo.do_something();
}
通过传递隐藏参数this=&my\u foo调用方法
foo::do\u something()
。这只是一个普通的C函数,它只获取一个隐藏参数。
do\u something
的代码实际上并没有访问
main
的堆栈框架,它只是使用
main
传递的
this

do_something
的内部,代码被视为:

   my_foo.do_something(); 

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

术语堆栈和堆对于C++来说是非常不明确的。最好参考本地和动态分配。基本答案是,您不应该关心这个抽象层。这取决于编译器和链接器,以使所有工作的目标平台。通读
this->foo_member1++;