構造函數爲什麼不能是虛構造函數

 class A{
 public:
     virtual A(){
         this->value = 0;
     }
 private:
     int value;
 };

爲什麼構造函數不能是虛函數呢?這裏你需要知道一個概念,那就是虛函數表vtbl,每一個擁有虛成員函數的類都有一個指向虛函數表的指針。對象通過虛函數表裏存儲的虛函數地址來調用虛函數。

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

轉自:http://blog.csdn.net/jiafu1115/article/details/17375789
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章