条款39 Use private inheritance judiciously
明智审慎地使用private继承
Private 继承意味 implemented-in-terms-of(根据某物实现出)。但是遇到implemented-in-terms-of时,应该尽可能使用composition(复合),必要时才使用private
代替private继承的方式也有很多,除了composition以外还可以在类里定义一个public继承类并封装成private。(这样可以阻止在其derived class中重新定义virtual函数)
那么什么情况会使用private继承?你处理的class没有任何data(不包含static变量)和virtual函数,只有non-virtual函数
比如以下代码
class Base{};
class Derived: private Base{
private:
int x;
};
sizeof(Derived)==sizeof(Base),这样的继承不会增加derived class的大小。
在STL的源码中似乎有应用
条款40 Use multiple inheritance judiciously
明智审慎地使用多重继承
如果遇见以上情况,打算把base class按照哪条路径复制到IOFile。默认会选择复制,但是如果这不是你的想法,你需要声明成virtual base class
注意:使用 virtual 继承的那些 classes 所产生的对象往往比使用 non-virtual 继承的兄弟们体积大,访问 virtual base classes 的成员变量时,也比访问 non-virtual base classes 的成员变量速度慢。
非必要不使用virtual class,避免在virtual class中放置数据