1. 程式人生 > >C++中this指標的本質

C++中this指標的本質

一直以來對C++中的this不理解,只知道在建構函式中,如果建構函式的引數和類成員的名字一樣的話,就可以用this指標來區分,如:

this->a = a;

一直以來都有這個疑問:this究竟是什麼?我們明明沒有定義這個this,但是我們可以直接用而編譯器不會報錯。今天來解決這個疑問。
從剛才的程式碼中,我們用”this->”而不是”this.”就說明this是一個指標,而我們知道,在C、C++中,指標就是地址,因此很容易想到,this也是一個地址。但是問題來了,this是誰的地址呢?我們看下面這個很簡單的C++程式:

#include <iostream>
class A { public: A(); }; A::A() { std::cout << "this " << this << std::endl; } int main() { A a; std::cout << "&a " << &a << std::endl; return 0; }

大家先在自己的腦袋中執行一下這個程式,然後看自己執行的結果與下面的是不是一樣。
這裡寫圖片描述

我們可以看到,this和&a的結果是一樣的。由此可以看出,this就是a的地址,而a是類A的一個物件,佔用了sizeof(A)的記憶體空間。

執行到A a這一句的時候,其實就生成了類A的一個物件,並同時為這個物件分配了sizeof(A)的記憶體空間,其實這個時候this也生成了,this就指向了這段記憶體空間,如下圖所示:
這裡寫圖片描述