1

私はクラスを持っています:

class node
{
public:

   node& parent;
}

parent正しい値がわかったら、値を設定したいと思います。

node parent;
...

node n;  // here node.parent is a not valid value
n.parent = parent; 

ただし、コンストラクターでも値を設定する必要があります。どのようにできるのか?

4

2 に答える 2

3

参照が参照する変数を変更することはできません。したがって、コンストラクターで初期化できない場合は、参照は必要ありません。通常のポインターを使用することもできますが、特定の用途に適したある種のスマートポインターを使用することをお勧めします。正解は、主に、参照されるオブジェクトの存続期間がどのように管理されているかによって異なります。

于 2012-07-01T10:23:35.497 に答える
2

クラスインスタンスが親ノードを所有していないことを示唆したいためにポインタではなく参照を使用したい場合はstd::reference_wrapper、C++11から使用できます<functional>

std::weak_ptr親が子への参照を保持し、子が親への参照を保持している場合は、スマートポインター(多分を除く)を使用しないことをお勧めします。この場合にスマートポインターを使用すると、循環依存関係が作成されます。つまり、オブジェクトが破棄されることはありません。

于 2012-07-01T10:27:33.450 に答える