C++裡的建構函式為什麼不能為虛函數

來源:互聯網
上載者:User

標籤:

  以下代碼在編譯時間會出錯,原因是建構函式不能為虛函數。

 1 class Student { 2 public: 3     virtual Student() 4     { 5         this->dwNo = 0; 6     } 7  8 private: 9     int dwNo;10 };

  那麼建構函式為什麼不能為虛函數呢?

  這裡你需要知道一個概念,那就是虛函數表vtbl,每一個擁有虛成員函數的類都有一個指向虛函數表的指標。對象通過虛函數表裡儲存的虛函數地址來調用虛函數。

  那虛函數表指標是什麼時候初始化的呢?當然是建構函式。當我們通過new來建立一個對象的時候,第一步是申請需要的記憶體,第二步就是調用建構函式。試想,如果建構函式是虛函數,那必然需要通過vtbl來找到虛建構函式的入口地址,顯然,我們申請的記憶體還沒有做任何初始化,不可能有vtbl的。因此,建構函式不能是虛函數。

C++裡的建構函式為什麼不能為虛函數

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.