【发布时间】:2014-01-25 22:54:48
【问题描述】:
Base 有一个虚函数,而 Derived 也有一个这样的虚函数,
class Base
{
private:
int i;
public:
Base(int data = 9):i(data)
{
cout << "In Base class constructor" << endl;
}
void display()
{
cout << "In Base class" << endl;
cout << "i = " << i << endl;
}
virtual ~Base()
{
cout << "In Base class destructor" << endl;
}
};
class Derived: public Base
{
private:
int j;
public:
Derived(int data = 10):Base(11),j(data)
{
cout << "In Derived class constructor" << endl;
}
virtual void display()
{
cout << "In Derived class" << endl;
cout << "j = " << j << endl;
}
~Derived()
{
cout << "In Derived class destructor" << endl;
}
};
现在在 gdb 中,我看到派生类对象的总大小为 16 字节(int+int+_vptr+_vptr),但是当我在 gdb 中打印每个对象时,我感到很困惑,对于基类,它显示如下
$1 = {_vptr.Base = 0x401010, i = 11} 很好,但是对于派生,它会显示类似这样的内容
$2 = {<Base> = {_vptr.Base = 0x401010, i = 11}, j = 10}
我没有看到派生类的虚拟指针。根据我的理解,除了继承的基类虚拟指针之外,派生类中应该还有一个虚拟指针应该指向它自己的虚拟表。我在这里做错了什么还是有其他方法可以得到它?
【问题讨论】:
-
type =是什么? -
我刚刚使用 ptype 从 gdb 打印。不是实际代码
-
还有为什么析构函数使用
int? -
显示逐字代码,而不是任何代码。
-
@Sarath,好吧,据我所知,gdb 看起来喝醉了。
标签: c++ pointers inheritance