This commit is contained in:
gcxzhang
2020-05-31 08:00:35 +08:00
parent 1d3f1aa822
commit d9dbf6f32f
3 changed files with 3 additions and 3 deletions

View File

@@ -12,7 +12,7 @@
为了实现虚函数C ++使用一种称为虚拟表的特殊形式的后期绑定。该虚拟表是用于解决在动态/后期绑定方式的函数调用函数的查找表。虚拟表有时会使用其他名称例如“vtable”“虚函数表”“虚方法表”或“调度表”。
虚拟表实际上非常简单,虽然用文字描述有点复杂。首先,**每个使用虚函数的类(或者从使用虚函数的类派生)都有自己的虚拟表**。该表只是编译器在编译时设置的静态数组。虚拟表包含可由类的对象调用的每个虚函数的一个条目。此表中的每个条目只是一个函数指针,指向该类可访问的派生函数。
虚拟表实际上非常简单,虽然用文字描述有点复杂。首先,**每个使用虚函数的类(或者从使用虚函数的类派生)都有自己的虚拟表**。该表只是编译器在编译时设置的静态数组。虚拟表包含可由类的对象调用的每个虚函数的一个条目。此表中的每个条目只是一个函数指针,指向该类可访问的派生函数。
其次编译器还会添加一个隐藏指向基类的指针我们称之为vptr。vptr在创建类实例时自动设置以便指向该类的虚拟表。与this指针不同this指针实际上是编译器用来解析自引用的函数参数vptr是一个真正的指针。