在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)的精確副本 –