Zac*_*ner 6 c++ virtual-functions
是否可以在运行时访问函数的v表?可以确定元信息,例如不同功能版本的数量吗?这可能更像是一个理论问题,但是开发人员是否可以通过确保v-table永远不会超过一定数量的行来限制可以扩展给定基类的类的数量?
Dav*_*eas 12
是否可以在运行时访问函数的v表?可以确定元信息,例如不同功能版本的数量吗?
不是以便携式方式.该标准甚至没有虚拟表的概念,它更像是一个实现细节而不是一个需求,即使我知道的所有实现都使用vtable.在一般情况下,在运行时甚至没有足够的信息可用(即编译器不需要在vtable中存储条目数,因为它看到类型并且可以计数)
开发人员是否可以通过确保v-table永远不会超过一定数量的行来限制可以扩展给定基类的类的数量?
再说不,但由于这表明存在误解,因此可能值得将它区分开来.当基类具有任何虚函数时,编译器(在所有使用vtable的实现中)将创建vtable,并且该表在基类中每个虚函数只有1个条目(加上一些附加数据--typeinfo或指向它的指针,偏移到对象的开头或其他实现细节).当类扩展该基类时,它不会向该vtable添加新元素,而是创建单独的vtable(或更多,取决于类型层次结构).如果派生函数不添加任何新的虚函数,则派生对象的vtable将包含原始vtable具有的确切元素数.也就是说,您可以拥有庞大的继承层次结构,而不会影响vtable布局.更改的是typeinfo存储的数据和指向每个虚函数的指针,它们将引用最终的覆盖
| 归档时间: |
|
| 查看次数: |
3590 次 |
| 最近记录: |