每个虚函数都在vtable中占了一个表项,保存真一条跳到它的入口地址的指令(实际上就是保存了它的入口地址)。
当一个包含虚函数的对象(注意,不是对象的指针)被创建的时候,它在头部附加了一个指针,指向vtable中相应的位置。
调用虚函数的时候,不管你是用什么指针调用,它先根据vtable找到入口地址再执行,从而实现了“动态联编”。
普通函数只是简单的跳到一个固定的地址。
本文解释了虚函数的工作原理,包括如何通过vtable实现动态联编。详细介绍了对象创建时如何附加指向vtable的指针,以及调用虚函数时如何定位到正确的函数入口。
每个虚函数都在vtable中占了一个表项,保存真一条跳到它的入口地址的指令(实际上就是保存了它的入口地址)。
当一个包含虚函数的对象(注意,不是对象的指针)被创建的时候,它在头部附加了一个指针,指向vtable中相应的位置。
调用虚函数的时候,不管你是用什么指针调用,它先根据vtable找到入口地址再执行,从而实现了“动态联编”。
普通函数只是简单的跳到一个固定的地址。

被折叠的 条评论
为什么被折叠?