C/C++教程

C++:虚函数表、指针的位置问题

本文主要是介绍C++:虚函数表、指针的位置问题,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

看着网上的有些个博客写的也不太准确;

虚函数表指针,是虚基类的一个成员,是一个指针;使用gdb看时,这个指针被归到了基类块。 这个指针放在类定义的起始位置。对象的起始位置。

所以派生类对象的内存布局是:

SubClass
{
	BaseClass1{
		vtable *;
		BaseClass members;按照类定义里的顺序
	}
	
	SubClass members;
}


class A
{
        virtual void fun1(){};
        int a;
        int b;
};

class B
{
        virtual void fun1(){};
        int a;
        int b;
};
class C:A,B
{
        virtual void fun1(){};
        int c;
        int d;
};

(gdb) p *c
$2 = {
  <A> = {
    _vptr.A = 0x4026b8 <vtable for C+16>, 虚函数表在 C 类定义的这个位置 如果又两个 相同的虚函数在两个基类里,其实用的是第一个的。
    a = 0,
    b = 0
  },
  <B> = {
    _vptr.B = 0x4026d0 <vtable for C+40>, 虚函数表在C 类定义的这个位置
    a = 0,
    b = 0
  },
  members of C:
  c = 0,
  d = 0
}

这篇关于C++:虚函数表、指针的位置问题的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!