作者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/cn.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