2012-04-25 56 views
2

在此處出現混淆。即使在初始化列表中傳遞this,程序也正在編譯並運行成功。 我的印象是,在這裏通過this編譯器應該給出一些錯誤,因爲這裏沒有創建對象。使用此指針的初始化列表

兩個cout s的輸出是相同的;即他們擁有相同的地址。

我知道這是不正確的編程方法,但是到底發生了什麼?

class foo 
    { 
      public: 
      foo():myself(this) {} 
      foo * myself; 
    }; 


    int main() 
    { 
      foo f; 
      cout<<f.myself<<endl; 
      cout<<&f<<endl; 
      return 0; 
    } 

回答

2

即使對象尚未完全初始化,它的地址已知並且可以分配給一個指針。

雖然這個習慣用法並不常見,但我可以看到它用於鏈接列表的初始化。