提问人:Cody M 提问时间:1/18/2021 更新时间:1/18/2021 访问量:249
C++ 堆栈帧/激活记录和“this”指针
C++ Stack Frame/Activation Record and 'this' pointer
问:
这是我在这里的第一篇文章,如果我搞砸了什么,我将不胜感激。 C++ 是否实现激活记录?我在这方面的经验主要是用 Java 的,所以我不确定其他语言是否也是如此。 如果是这样,在 C++ 中说“this”是指向激活堆栈上前一条记录的指针是否正确? 例如:
...
class Example {
private:
int num;
public:
void setNum(int num) {
this->num = num;
}
...
因此,激活堆栈上将有一个“Example”对象,然后当调用函数“setNum(...)”时,它会将该调用放在激活堆栈上。因此,“this”的类型为 Example*,并指向函数调用之前堆栈上的“Example”对象。这是对的吗? 谢谢大家!
答:
0赞
Raildex
1/18/2021
#1
this
仅存在于 或 中。它不存在于自由函数中。class
struct
this
指向调用其成员函数的对象。
在本例中,指向 的实例,因此类型为this
Example
Example*
我不知道 ActivationRecord 这个词。C++不知道函数堆栈的概念,这只是一个实现细节。
0赞
SlyFox
1/18/2021
#2
在 с++ 中一切都非常糟糕。 将指针指向当前对象(的实例)。如果可以调用,那么你已经有了这个对象。您不需要它来为任何成员设置值。this
class Example
setNum
class Example {
private:
int num;
public:
void setNum(int _num) {
num = _num;
}
};
评论
this
这将
指向函数调用之前堆栈上的示例
对象?”不,一般来说,这是不正确的。 将指向实际对象,无论它在哪里。如果它位于堆上,则将指向堆上的此对象。this
this