c++ 虚函数表

在C++中,虚函数表(vtable)是存储在类的内存空间中的,每个包含虚函数的类都有一个虚函数表。这个表是一个存储虚函数地址的数组,它在编译时被创建。

虚函数表保存在.rdata只读数据段,也就是C++内存模型中的常量区虚函数表属于类,类的所有对象共享这个类的虚函数表。

虚表指针(vptr)是对象实例中的一个成员,它指向该对象所属类的虚函数表。当类的对象被实例化后,该对象会拥有一个指向虚函数表的指针,即虚函数指针。虚表指针的存储位置与对象存储的位置相同,即存在对象内存布局的最前面。

这些设计使得对象可以在运行时调用正确的虚函数,实现多态性。当存在多重继承时,一个类可能会有多个虚函数表,每个虚函数表包含了相应基类的虚函数地址。这样,通过虚函数指针,对象可以在运行时调用正确的虚函数,实现多态性。虚函数则位于代码段(.text),也就是C++内存模型中的代码区。这些设计使得对象可以在运行时调用正确的虚函数,实现多态性。当存在多重继承时,一个类可能会有多个虚函数表,每个虚函数表包含了相应基类的虚函数地址。这样,通过虚函数指针,对象可以在运行时调用正确的虚函数,实现多态性。

posted @ 2023-11-29 16:34  ponder776  阅读(12)  评论(0编辑  收藏  举报