私はクラスを持っています:
class node
{
public:
node& parent;
}
parent
正しい値がわかったら、値を設定したいと思います。
node parent;
...
node n; // here node.parent is a not valid value
n.parent = parent;
ただし、コンストラクターでも値を設定する必要があります。どのようにできるのか?
参照が参照する変数を変更することはできません。したがって、コンストラクターで初期化できない場合は、参照は必要ありません。通常のポインターを使用することもできますが、特定の用途に適したある種のスマートポインターを使用することをお勧めします。正解は、主に、参照されるオブジェクトの存続期間がどのように管理されているかによって異なります。
クラスインスタンスが親ノードを所有していないことを示唆したいためにポインタではなく参照を使用したい場合はstd::reference_wrapper
、C++11から使用できます<functional>
。
std::weak_ptr
親が子への参照を保持し、子が親への参照を保持している場合は、スマートポインター(多分を除く)を使用しないことをお勧めします。この場合にスマートポインターを使用すると、循環依存関係が作成されます。つまり、オブジェクトが破棄されることはありません。