クラスAがクラスBから継承し、AがBの独自のインスタンス化を持たないようにしたい
アイデアは、(B new を使用して) ヒープ上に B オブジェクトを作成し、A へのポインターを与えることです。その後、A はこのオブジェクトを使用して継承を解決します。
これは私がやりたいことの例です:
B* b = new B();
b->myBmethode();
{
A(b);
A.myBmethode();
} // A destroyed
b->myBmethode();
delete b;
クラスAがクラスBから継承し、AがBの独自のインスタンス化を持たないようにしたい
アイデアは、(B new を使用して) ヒープ上に B オブジェクトを作成し、A へのポインターを与えることです。その後、A はこのオブジェクトを使用して継承を解決します。
これは私がやりたいことの例です:
B* b = new B();
b->myBmethode();
{
A(b);
A.myBmethode();
} // A destroyed
b->myBmethode();
delete b;
いいえ、それは不可能です (私があなたの質問を正しく理解していれば)。
3.7.5
メンバー サブオブジェクト、基底クラス サブオブジェクト、および配列要素の保存期間は、それらの完全なオブジェクトの保存期間です。
B が A の外部で作成された場合、明示的に削除しない限り、A が削除された後に B が自動的に削除されることはありません。
インターフェイス IA を作成し、A と B の両方にそのインターフェイスを実装させます。B の場合、すべての実際の実装を B に委譲するだけです。
B のライフサイクルは設計によって異なります。いつ破壊したいですか?意味がある場合は、B シングルトンを作成することもできます。
class IA {
virtual doA() = 0;
}
class A: public IA {
virtual doA();
}
class B: public IA {
B(A&a);
virtual doA(){
a.doA();
}
private:
A&a;
}
//init
A* a = A::getInstance();
B *b = new(*a) ;
b->doA();