首页 > 解决方案 > C++ 堆栈帧/激活记录和“this”指针

问题描述

这是我在这里的第一篇文章,如果我搞砸了,我会很感激任何建议。C++ 是否实现了激活记录?我在这方面的经验主要是使用 Java,所以我不确定其他语言是否也一样。如果是这样,在 C++ 中说“this”是指向激活堆栈上前一条记录的指针是否正确?例如:

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

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

标签: c++pointersstackthisactivation

解决方案


this只存在于classorstruct中。它不存在于自由函数中。

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

在你的情况下,this指向一个实例,Example因此类型是Example*

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


推荐阅读