C++ sizeof 虚函数和 虚继承

[复制链接]
查看11 | 回复3 | 2013-4-1 13:43:56 | 显示全部楼层 |阅读模式
虚继承是和多继承相关的,你这里没有多继承,virtual没有意义!除非B的派生类的派生类采用多继承,并且继承了两个以上的B的派生类或子孙类,虚继承没有什么用处;虚继承,是为了消除继承体系中的的钻石菱形,而定制的,没有别的作用。不管有没有虚继承,只要有虚函数,就会有虚函数表,就会在对象里安排一个和虚函数表相关的vptr 这是C++面向对象特性的实现方法,具体安排和编译器有关,也和继承体系的复杂程度有关。由于A类并无虚函数,虚继承的必要性不大。虚继承只和对象布局相关,而对象布局不同编译器的实现是不同的。A是个空类,本身并无虚函数,单独定义一个对象,C++会为他分配至少一个字节继承后由于B类有虚函数,指向虚函数表的VPTR要占...
回复

使用道具 举报

千问 | 2013-4-1 13:43:56 | 显示全部楼层
你好,我用我的visual studio2014跑了一下你的代码,注释掉是4,不注释是8,可见是编译器不同,导致结果也不同,我的这个结果非常好解释,virtual指针和虚函数指针所以是8...
回复

使用道具 举报

千问 | 2013-4-1 13:43:56 | 显示全部楼层
跟编译器的优化实现有关吧,往A加个函数可能结果又不一样,实在不必过于纠结这个,虚继承并不多用。...
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行