分配'this'指针的内存

时间:2014-01-12 03:41:20

标签: c++ pointers this

在C ++中,这个指针作为隐藏参数传递给方法,它实际指向当前对象,但是'this'指针存储在内存中...堆栈,堆,数据在哪里?

4 个答案:

答案 0 :(得分:6)

标准没有指定this指针的存储位置。

当它在该函数的调用中传递给成员函数时,一些编译器将它传递给寄存器,而其他编译器将它传递给堆栈。它还可以取决于编译器选项。

关于唯一可以肯定的是,this是基本类型的右值,因此您无法获取其地址。

并非总是如此。

在预标准C ++中,您可以分配给this,例如为了表示构造函数失败。这是在引入例外之前。指示构造失败的现代标准方法是抛出异常,这保证了有序清理(如果没有被用户的代码挫败,例如臭名昭​​着的MFC放置new错误)。

答案 1 :(得分:1)

在C ++中,this是“简单地”指向当前对象的指针。它允许您访问特定于对象的数据。

例如,当类中的代码具有以下代码段时:

this->temperature = 40.0f;

它设置任何对象的温度(假设temperature不是类级静态,在类的所有对象之间共享)。

this指针本身不需要分配(就动态内存而言),它完全取决于它是如何在封面下处理的,标准实际上没有强制要求(标准倾向比内部更多地关注行为。)

可以可以有多少个地方:堆栈,特定内存位置,寄存器等等。所有你必须关心的是它的行为,基本上就是你如何使用它来访问对象。

this 指向的是对象本身,它通常用new分配给动态分配,或者在堆栈上。

答案 2 :(得分:1)

this指针分配在类函数的堆栈上(或者有时是寄存器)。

然而,这不是你实际问的问题。

答案 3 :(得分:0)

this指针位于对象本身*中。 排序。它是对象的内存位置。

如果对象在堆栈上,则该指针位于堆栈上。

如果对象在堆上,则this指针位于堆上。

最重要的是,你无需担心。

* [更新]让我回复/澄清/纠正我的回答。物理this指针不在对象中。

我会得出结论,这个指针是由编译器派生的,它只是存储在符号表中的对象的地址。在语义上,它在对象内部,但这不是OP所要求的。

这是堆栈上3个变量的内存布局。中间的是一个对象。你可以看到它拥有一个变量,而不是其他任何东西:

enter image description here

相关问题