我想知道包含一个或多个虚函数(但只包含虚函数)的类的对象大小。每个人都说答案是4.但是当我试图在TCWIN45上运行这些代码时,我得到2作为输出。
答案 0 :(得分:3)
从技术上讲,类对象的大小为未指定。
请注意,动态调度的实现对于编译器是开放的。实现可以使用他们选择的任何机制,也不需要记录它。
大多数实现使用 虚拟表和指针 机制,其中虚拟指针被添加到每个类对象并增加了开销。也有可能增加其他尺寸的东西。
通常,
对象的大小=非静态数据成员的大小+填充字节+ vptr的大小(适用)
答案 1 :(得分:2)
“TCWIN45”是一个旧的16位编译器。在那里,每个指针是两个字节。典型的答案(4)适用于更常见的32位编译器。
答案 2 :(得分:0)
取决于它,它通常是指针的大小(4或8个字节),但在这种情况下,它很可能是全局表中的索引。编译器可能假设整个程序中不超过2 ^ 16个多态类。
编辑:不一定在整个程序中,但至少在当前的类层次结构中。