警告:请记住,这个问题是完全错误的 - 这是一个错误的假设,因为我误解了一篇关于C ++的写得不好的教程(实际上是一本书)。如果你很好奇,这是原始内容:
在C ++中,将方法标记为虚拟会导致对象使用更多 内存 - 对于每个额外的虚拟方法,指针的内存 (4 - 8字节)更多。 Java如何处理所有方法 默认情况下是虚拟的吗?
答案 0 :(得分:0)
您确定对象使用的内存更多吗?我会说你在虚拟功能表中使用了更多空间,但没有使用每个对象。
答案 1 :(得分:0)
您的基本假设不正确。对象的大小不会随着虚函数的增加而增加。
如果该类具有任何虚函数,则它具有指向该类的vtable的单个指针。无论有多少虚函数,对象的大小都不会发生变化:
struct s0 {};
struct s1
{
virtual void f1() {}
};
struct s2
{
virtual void f1() {}
virtual void f2() {}
};
struct s3
{
virtual void f1() {}
virtual void f2() {}
virtual void f3() {}
};
int main()
{
std::cout << "s0: " << sizeof(s0) << '\n';
std::cout << "s1: " << sizeof(s1) << '\n';
std::cout << "s2: " << sizeof(s2) << '\n';
std::cout << "s3: " << sizeof(s3) << '\n';
}
<强>结果:强>
s0: 1
s1: 8
s2: 8
s3: 8