3

封じ込めの代わりにプライベート継承を使用する必要がある場合を説明する一方で、この記事の作成者は次のように述べています。

「別のベースサブオブジェクトの前に使用済みオブジェクトを作成するか、後で破棄する必要があります。オブジェクトの存続期間が少し長いことが重要な場合は、継承を使用する以外に取得する方法はありません。」

サブオブジェクトAをサブオブジェクトBの前に構築し、Bの後に破棄する場合、囲んでいるクラスでAをBの前に宣言するだけでは不十分ですか?言い換えれば、この場合、なぜ封じ込めを使用して同じ結果を達成できないのでしょうか。

4

1 に答える 1

8

著者は、直接のサブオブジェクトではなく、基本のサブオブジェクトについて話していると思います。つまり、クラスの他の基本クラスが構築される前に、クラスの一部のメンバーが構築されるようにする場合は、プライベート継承を使用します。この場合、プライベート継承を使用すると、C ++は、他の基本クラスよりも先にプライベート継承された基本クラスを初期化します。ただし、それらから正しい順序で継承している必要があります。たとえば、クラスを作成していてDerived、にSubobjectオブジェクトが必要でDerived、から継承したいが、の前に初期化しBaseたい場合は、次のように記述できます。SubobjectBase

class Derived: private Subobject, public Base {

}

そして今、Subobjectはの前に初期化されますBase

(とはいえ、これはかなりばかげたユースケースです!)

お役に立てれば!

于 2012-02-07T23:29:28.657 に答える