2017-02-19 4 views
0
// C.h 
class C { 
private: 
    A _a_in_C; 
    B *_b_in_C; 

public: 
    ... 
} 

// B.h 
private: 
    A& _a_in_B; 

public: 
    B(A& a): _a_in_B(a) {} 
    ... 

オブジェクト_b_in_Cは、いずれかの方法でCの生存期間のある時点で作成されます。 _a_in_C_a_in_Bと同じオブジェクトにして、_a_in_Cが変更されるたびに_a_in_Bも同時に変更するようにします。C++、値をコピーしない参照でコンストラクタを作る方法はありますか?

問題はBの新しいインスタンスが作成されると、_a_in_BBで参照を使用しての目的を破り、コンストラクタが作業を終了した後のゴミの完全な_a_in_Bを残し_a_in_Cの一時コピーを、受信することです。

+1

私たちにコンストラクタの呼び出しを表示すると、投稿されたコードは必要な処理を行う必要があります。 – xinaiz

+0

[最小、完全で、検証可能な例](http://stackoverflow.com/help/mcve)を作成してください。 – qxz

+0

'_b_in_C'にヌルポインタを設定する必要があります:' B * _b_in_C = nullptr; '、すでに定義されているかどうかを知ることができます。 –

答えて

0

これは複数の理由から悪い考えです。 *

A* originalObj = new A() 

A** pointer1 = &originalObj 
A** pointer2 = &originalObj 

を、あなたはその後、

originalObj = somethingElse 

*(* pointer1)との操作を行います。あなたはどこかに持っている場合は

:しかしかかわらず、はい、これは、ポインタへのポインタを使用して行うことができます(* pointer2)は両方とも変更を反映します。

これは状況に合わせて翻訳する必要がありますが、それは比較的簡単です。

関連する問題