作者yam276 (史萊哲林的優等生)
看板Marginalman
標題[閒聊] 每日C++小秘密(1):避免使用 virtual 函式
時間Fri Oct 25 18:50:47 2024
避免使用 virtual 函式(若無必要)
virtual 函式會引入一些額外的開銷,
因為需要透過虛函式表(vtable)間接調用。
如果不需要多型,可以避免使用 virtual。
虛函式的開銷來自哪裡?
虛函式表(vtable):
每個類型都有一個對應的虛函式表,
用來存儲該類型中虛函式的地址。
虛表指標(vptr):
每個物件包含一個指標指向虛函式表。
間接調用:
每次調用虛函式時,
程式會透過 vptr 指向的虛表來查找函數地址,
並進行一次間接函數調用,這增加了少量的執行時間。
何時不使用 virtual?
不需要多型行為時:
如果你不需要透過基類指標或引用調用子類的函數,
那就不需要 virtual 函數。
高效能要求的場景:
在高性能場景下,避免 virtual 函數的動態綁定能提升效能。
設計為不可覆寫的函數:
如果你希望某個函數無法被子類覆寫,則不要使用 virtual。
--
真假
想知道更多C++小秘密
請等我繼續重讀Effective Modern C++
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 114.32.48.170 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Marginalman/M.1729853449.A.E52.html
1F:推 sustainer123: 大佬 10/25 18:51
2F:→ yam276: 本日Rust小秘密: C++的&&跟std::move在Rust預設內建 10/25 18:52
3F:推 oin1104: 大師 我哭了 教我寫程式 10/25 18:52
4F:→ v03516020: 謝謝,我頭痛起來了 10/25 18:53
5F:→ devilkool: 謝謝 10/25 18:55
6F:推 encorek22554: 謝謝 小孩喜歡 10/25 18:57
7F:推 CCapocalypse: 大師 10/25 19:39