【C++學習】C++虛函數與虛表

待理順的問題(TODO)

  • 爲什麼A是16字節,而不是8字節?
  • 爲什麼加上#pragma pack(4)之後, sizeof(A)的結果就是12了?#pragma pack對C++對象的影響是多少?
  • g++如何查看編譯後的內存佈局?

虛表的定義

虛函數表。編譯器爲每個類在對應的類空間分配一塊內存用來存儲該類的所有虛函數。

  • 爲什麼需要虛表?

驗證環境

在不同的環境下跑出來的結果貌似是不同的。本文的運行環境:

g++ --version
g++ (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0
Copyright (C) 2017 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

虛表的內存

繼承自1個類的場景

總體說明:class A, class B, B----繼承----->A。

考慮元素1 考慮元素2
B是否新定義自己的虛函數 B是否重寫A的虛函數

根據如上考慮元素,有如下幾個場景:

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章