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
仅存在于 class
或 struct
中。它不存在于自由函数中。
this
指向调用成员函数的对象
在你的例子中,this
指向 Example
的一个实例,因此类型是 Example*
我不知道 ActivationRecord 这个词。 C++ 不知道函数栈的概念,那只是一个实现细节。
在 с++ 中一切都非常简单。 this
将是指向当前对象(class Example
的实例)的指针。如果可以调用 setNum
那么你已经有了这个对象。你不需要这个来为任何成员设置值。
class Example {
private:
int num;
public:
void setNum(int _num) {
num = _num;
}
};
这是我第一次 post 在这里,如果我搞砸了一些事情,我将不胜感激任何建议。 C++ 是否实现激活记录?我在这方面的经验主要是 Java,所以我不确定其他语言是否也一样。 如果是这样,在 C++ 中说 'this' 是指向激活堆栈上前一条记录的指针是否正确? 例如:
...
class Example {
private:
int num;
public:
void setNum(int num) {
this->num = num;
}
...
因此,激活堆栈将在堆栈上有一个 'Example' 对象,然后当函数 'setNum(...)' 被调用时,它将将该调用放入激活堆栈。所以 'this' 将是 Example* 类型,并且指向函数调用之前堆栈上的 'Example' 对象。那是对的吗? 谢谢大家!
this
仅存在于 class
或 struct
中。它不存在于自由函数中。
this
指向调用成员函数的对象
在你的例子中,this
指向 Example
的一个实例,因此类型是 Example*
我不知道 ActivationRecord 这个词。 C++ 不知道函数栈的概念,那只是一个实现细节。
在 с++ 中一切都非常简单。 this
将是指向当前对象(class Example
的实例)的指针。如果可以调用 setNum
那么你已经有了这个对象。你不需要这个来为任何成员设置值。
class Example {
private:
int num;
public:
void setNum(int _num) {
num = _num;
}
};