1

クラス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;
4

3 に答える 3

1

いいえ、それは不可能です (私があなたの質問を正しく理解していれば)。

3.7.5

メンバー サブオブジェクト、基底クラス サブオブジェクト、および配列要素の保存期間は、それらの完全なオブジェクトの保存期間です。

于 2013-08-09T05:13:26.380 に答える
0

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();
于 2013-08-09T05:13:19.620 に答える