自学内容网 自学内容网

C++中多态的底层实现机制(虚指针和虚函数表)

在C++中,从浅层看,多态是利用虚函数的手段实现的,深挖一层的话,你会发现其底层机制是虚指针(vptr)和虚函数表(vtable),在调用虚函数实现多态行为时,是利用虚指针和虚函数表确定实际要调用哪个虚函数的。

虚函数表特点:

  • 每个有虚函数的类都会有一个虚函数表,并且只会有一个。
  • 虚函数表是在编译时确定的。
  • 虚函数表是和类绑定的,而不是和类的实例绑定的,同一个类的所有实例访问的都是同一个虚函数表(通过虚指针访问),即和这个类绑定的虚函数表。
  • 虚函数表是由编译器自动生成的一个结构,其内容是一些指针,这些指针指向该类所实现的所有虚函数。

虚指针特点:

  • 有虚函数的类的每个实例,都会有一个自己的虚指针,但是这些虚指针指向的是同一个虚函数表,即和这个类绑定的虚函数表。
  • 虚指针是类的每个实例在创建时自动生成的一种指针,在实例构造时完成初始化,指向虚函数表。

当通过基类指针或引用调用虚函数时,会根据实际指向的实例中的虚指针,找到实际需要的虚函数表,然后找到实际应该调用的虚函数。


原文地址:https://blog.csdn.net/2401_85919417/article/details/143027175

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!