【发布时间】:2015-08-24 02:36:53
【问题描述】:
注意:我不是在问为什么父类需要有虚方法。
我记得类似这样的编码准则(我不太记得,只是尝试用我自己的话来表达,希望我的措辞正确):如果父类有虚方法,派生类至少也应该有一个虚方法,即使是派生类也不会从自身派生出类,如果派生类真的不需要任何虚方法,则将析构函数设置为虚。背后的原因类似于“防止重复虚拟表”,它在说什么?
我还记得一个相关的例子:
class A{
virtual f();
};
class B : public A{
};
B作为没有派生类,如果B没有虚方法,后果是“任何包含B的地方都会有一个由编译器生成的重复虚表”(也只是根据我的印象表达),什么是这是什么意思(如果是真的)?
【问题讨论】:
-
就好像它是由未定义的 AFAIK 声明的一样,也就是说,在您尝试在某处调用它之前不会出现编译器错误。
-
你必须做得比“类似的东西”和一大堆华夫饼做得更好。您要求我们对您无法准确引用或引用的错误记忆的编码标准发表评论。这是毫无意义。陈述的原因“任何包含 B 的地方都会有一个由编译器生成的重复虚拟表”完全是废话。每个类最多只有一个 vtable。
标签: c++ inheritance coding-style