[深度继承层次结构]通过添加不必要的复杂性极大地增加了维护负担,迫使用户学习许多类的接口,即使他们想要做的只是使用特定的派生类.它还可以通过向不真正需要它们的类添加不必要的vtable和间接性来影响内存使用和程序性能.如果您发现自己经常创建深层继承层次结构,则应该检查您的设计风格,看看您是否已经习惯了这种坏习惯.很少需要深层次的层次结构,而且几乎从不好.如果你不相信,但认为"OO只是不是没有大量继承的OO",那么一个好的反例要考虑的是[C++]标准库本身.- Herb Sutter
正如多次提到的,深度嵌套的单继承层次结构不应为虚拟调用带来额外的开销(高于任何虚拟调用所带来的开销)。
然而,当涉及多重继承时,通过基类指针调用虚函数时有时会产生非常轻微的额外开销。在这种情况下,一些实现让虚拟函数通过一个小 thunk 来调整“this”指针,因为
(static_cast<Base*>( this) == this)
Run Code Online (Sandbox Code Playgroud)
不一定正确,具体取决于对象布局。
请注意,所有这些都非常非常依赖于实现。
参见Lippman的《Inside the C++ Object Model》第4.2章——虚拟成员函数/MI下的虚拟函数
| 归档时间: |
|
| 查看次数: |
4141 次 |
| 最近记录: |