C++虚继承和多重继承时的指针类型转换

来源:互联网 发布:micropython 单片机 编辑:程序博客网 时间:2024/06/14 08:33

虚继承会导致子类的大小增加4个字节(VS2008编译器),即使子类没有任何新成员。虚继承加上多重继承,同样又会导致增加4个字节。看下面的示例代码:

class WndPtr{public:int handle;};class IWnd : public virtual WndPtr{;};class ListBoxPtr : public virtual WndPtr{;};class ICtrl : public IWnd{;};class ListBox : public ICtrl,public ListBoxPtr{;};

sizeof(WndPtr) = 4

sizeof(IWnd) = 8

sizeof(ListBoxPtr) = 8

sizeof(ICtrl) = 8

sizeof(ListBox) = 12

不知道是不是为了避免错误的类型转换。比如:如果ICtrl和ListBox大小一样,那么这个两个类型指针就可以自由转换,但是ICtrl并不包含ListBoxPtr的函数和成员,这种转换是不允许的。如果强制转换,虽然ListBoxPtr的handle其实就是ICtrl的handle,但是调试模式下,无法查看ListBoxPtr的成员。

原创粉丝点击