C++ 堆栈 Frame/Activation 记录和 'this' 指针

C++ Stack Frame/Activation Record and 'this' pointer

这是我第一次 post 在这里,如果我搞砸了一些事情,我将不胜感激任何建议。 C++ 是否实现激活记录?我在这方面的经验主要是 Java,所以我不确定其他语言是否也一样。 如果是这样,在 C++ 中说 'this' 是指向激活堆栈上前一条记录的指针是否正确? 例如:

...
class Example {
private:
    int num;
public:
    void setNum(int num) {
        this->num = num;
    }
...

因此,激活堆栈将在堆栈上有一个 'Example' 对象,然后当函数 'setNum(...)' 被调用时,它将将该调用放入激活堆栈。所以 'this' 将是 Example* 类型,并且指向函数调用之前堆栈上的 'Example' 对象。那是对的吗? 谢谢大家!

this 仅存在于 classstruct 中。它不存在于自由函数中。

this指向调用成员函数的对象

在你的例子中,this 指向 Example 的一个实例,因此类型是 Example*

我不知道 ActivationRecord 这个词。 C++ 不知道函数栈的概念,那只是一个实现细节。

在 с++ 中一切都非常简单。 this 将是指向当前对象(class Example 的实例)的指针。如果可以调用 setNum 那么你已经有了这个对象。你不需要这个来为任何成员设置值。

class Example {
private:
    int num;
public:
    void setNum(int _num) {
        num = _num;
    }
};