在C++中,该指针作为一个隐藏的参数传递给方法,该参数实际上指向当前对象,但'this'指针存储在内存中......堆栈,堆,数据?分配'this'指针的内存
回答
的标准没有规定的this
指针的存储位置。
当它在该函数的调用中传递给成员函数时,一些编译器将其传递到一个寄存器中,而其他编译器则将其传递到堆栈上。它也可以依赖于编译器选项。
关于唯一可以确定的是this
是一个右值的基本类型,所以你不能接受它的地址。
这并不总是那样。
在预标准C++中,您可以指定为this
,例如,以指示构造函数失败。这是在引入例外之前。指示构造失败的现代标准方法是抛出一个异常,这保证了有序的清理(如果没有被用户代码挫败,例如臭名昭着的MFC位置new
错误)。
在C++中,this
是“简单地”指向当前对象的指针。它允许您访问特定于对象的数据。
例如,当在一个类中的代码具有以下片段:
this->temperature = 40.0f;
它设置为任何对象被作用时的温度(假定temperature
不是类级静态时,所有对象之间共享的类)。
this
指针本身不必分配(就动态内存而言),它完全取决于它是如何在封面下处理的,标准实际上并未授权(标准倾向于更多地关注关于行为而不是内部)。
可能是是:在堆栈上,在特定的内存位置,在寄存器等等。所有你必须关心的是它的行为,基本上你如何使用它来访问对象。
什么this
指向是对象本身,它通常分配为new
动态分配,或在堆栈上。
这个指针被分配到你的类函数(或者有时候是一个寄存器)的堆栈中。
然而,这不太可能是您实际询问的问题。
其实这似乎正是被问到的问题。尽管如此,恐怕答案太模糊了。 –
该指针位于对象本身*中。 排序的。它是对象的内存位置。
如果对象位于堆栈上,则此指针位于堆栈上。
如果对象位于堆上,则此指针位于堆上。
底线,没什么需要担心的。
* [更新]让我退一步/澄清/更正我的答案。该物理指针不在该对象中。
我会得出结论,这个指针是由编译器派生出来的,它只是存储在符号表中的对象的地址。在语义上,它在对象内部,但这不是OP所要求的。
这是堆栈上3个变量的内存布局。中间一个是一个对象。你可以看到它认为它是一个变量,没有别的:
- 1. Ç - 指针内存分配
- 2. 双指针内存分配
- 3. 内存分配指针指向数组和指针指针
- 4. 如何在内存中分配一个指针内的指针?
- 5. c指向指针内存分配的指针
- 6. 指针数组的C++内存分配
- 7. C++中的指针内存分配
- 8. 分配内存的指针结构
- 9. 指针阵列的内存分配
- 10. 空指针,内存分配和Valgrind的
- 11. 对象指针的C++内存分配
- 12. C中的内存分配和指针
- 13. 内存分配函数内指针指针
- 14. 释放分配给指针的内存vs释放分配给指针指向的内存
- 15. 类内的“this”指针
- 16. 是否删除[]释放指针分配的内存指针
- 17. C:正确的语法分配内存使用指针指针
- 18. 为三指针分配内存
- 19. python指针内存重新分配
- 20. Mips动态内存分配和指针
- 21. 内存分配(指针和堆栈)
- 22. 指针和C内存分配
- 23. 指针和动态内存分配
- 24. 将内存分配给双指针?
- 25. 指针内存分配问题
- 26. 内存分配和NULL指针
- 27. 辨别指针和内存分配
- 28. 分配内存到char指针
- 29. 三重指针和内存分配
- 30. 矢量指针内存分配矢量
假设你的意思是你的代码在调用某个方法的时候知道'this'是什么......它取决于许多因素会有所不同,但是你肯定可以猜测或者看看你的编译器产生一个想法。 – asveikau
我读过'this'实际上并不是指针,它的表达是真的吗? – nilesh
[存储在计算机内存中的'this'指针在哪里?](http://stackoverflow.com/questions/16585562/where-is-the-this-pointer-stored-in-computer-memory)的精确副本 –