避免使用 virtual 函式(若無必要)
virtual 函式會引入一些額外的開銷,
因為需要透過虛函式表(vtable)間接調用。
如果不需要多型,可以避免使用 virtual。
虛函式的開銷來自哪裡?
虛函式表(vtable):
每個類型都有一個對應的虛函式表,
用來存儲該類型中虛函式的地址。
虛表指標(vptr):
每個物件包含一個指標指向虛函式表。
間接調用:
每次調用虛函式時,
程式會透過 vptr 指向的虛表來查找函數地址,
並進行一次間接函數調用,這增加了少量的執行時間。
何時不使用 virtual?
不需要多型行為時:
如果你不需要透過基類指標或引用調用子類的函數,
那就不需要 virtual 函數。
高效能要求的場景:
在高性能場景下,避免 virtual 函數的動態綁定能提升效能。
設計為不可覆寫的函數:
如果你希望某個函數無法被子類覆寫,則不要使用 virtual。