[闲聊] 每日C++小秘密(1):避免使用 virtual 函式

楼主: yam276 ('_')   2024-10-25 18:50:47
避免使用 virtual 函式(若无必要)
virtual 函式会引入一些额外的开销,
因为需要透过虚函式表(vtable)间接调用。
如果不需要多型,可以避免使用 virtual。
虚函式的开销来自哪里?
虚函式表(vtable):
每个类型都有一个对应的虚函式表,
用来存储该类型中虚函式的地址。
虚表指标(vptr):
每个物件包含一个指标指向虚函式表。
间接调用:
每次调用虚函式时,
程式会透过 vptr 指向的虚表来查找函数地址,
并进行一次间接函数调用,这增加了少量的执行时间。
何时不使用 virtual?
不需要多型行为时:
如果你不需要透过基类指标或引用调用子类的函数,
那就不需要 virtual 函数。
高效能要求的场景:
在高性能场景下,避免 virtual 函数的动态绑定能提升效能。
设计为不可覆写的函数:
如果你希望某个函数无法被子类覆写,则不要使用 virtual。

Links booklink

Contact Us: admin [ a t ] ucptt.com