C/C++ 虚函数的实现的基本原理

通常,编译器处理虚函数的方法是:给每个对象添加一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针,这种数组称为虚函数表。简单的说,每一个含有虚函数(无论是其本身的,还是继承而来的)的类都至少有一个与之对应的虚函数表,其中存放着该类所有的虚函数对应的函数指针。

例如:基类对象包含一个指针,该指针指向基类中所有虚函数的地址表。派生类对象将包含一个指向独立地址表的指针。

如果派生类提供了虚函数的新定义,该虚函数表将保存新函数的地址;如果派生类没有重新定义虚函数,继承类的虚函数表将保存虚函数原始版本的地址。如果派生类定义了新的虚函数,则该函数的地址也将被添加到继承类的虚函数表中。

*注意:无论类中包含的虚函数是1个还是10个,都只需要在对象中添加1个地址成员,只是表的大小不同而已。

使用虚函数时增加的成本:

 

 

  •  每一个对象都增大,增大量为存储地址的空间(给每个对象添加了一个隐藏成员。隐藏成员中保存了一个指向函数地址数组的指针);
  • 对于每个类,编译器都创建了一个虚函数表(数组);
  • 对于每一个虚函数的调用,都需要执行一项额外的功能,到表中查找该虚函数地址并执行虚函数。

原文链接: https://www.cnblogs.com/jibisheng/p/13160054.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍;

也有高质量的技术群,里面有嵌入式、搜广推等BAT大佬

    C/C++ 虚函数的实现的基本原理

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/356693

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年3月2日 上午11:21
下一篇 2023年3月2日 上午11:21

相关推荐