Bel*_*loc 3 c++ inheritance containment private-inheritance
虽然说明当私有继承必须使用而不是遏制,这一点笔者文章说以下内容:
"我们需要在另一个基础子对象之前构造使用过的对象,或者在它之后销毁它.如果稍长的对象生命周期很重要,那么除了使用继承之外,没有办法得到它"
如果你希望子对象A在子对象B之前构造并在B之后被破坏,那么在封闭类中,在B之前声明A是不够的?换句话说,为什么我们不能在这种情况下使用遏制来达到相同的结果呢?
我认为作者正在谈论基础子对象,而不是直接的子对象.也就是说,如果您希望在构造类的其他基类之前构造类的某个成员,则可以使用私有继承.在这种情况下,使用私有继承将导致C++在其他基类之前初始化私有继承的基类,前提是您以正确的顺序从它们继承.例如,如果你正在制作类Derived
,想要一个Subobject
对象Derived
,并继承Base
,但你想在Subobject
之前初始化Base
,你可以写
class Derived: private Subobject, public Base {
}
Run Code Online (Sandbox Code Playgroud)
现在Subobject
将在之前初始化Base
.
(也就是说,这是一个非常愚蠢的用例!)
希望这可以帮助!