我有一个班级:
class node
{
public:
node& parent;
}
当我知道正确的值时,我想设置parent
值:
node parent;
...
node n; // here node.parent is a not valid value
n.parent = parent;
但我必须在构造函数中设置它的值。我该怎么办?
答案 0 :(得分:3)
您无法更改引用引用的变量。因此,如果您无法在构造函数中初始化它,则不需要引用。您可以使用常规指针,但最好使用适合您特定用途的某种智能指针。正确答案主要取决于如何管理引用对象的生命周期。
答案 1 :(得分:2)
如果你想使用引用而不是指针,因为你想建议类实例不拥有父节点,那么你可以使用C ++ 11的<functional>
中的std::reference_wrapper
。
我建议不要使用智能指针(除了std::weak_ptr
除外),如果父对象持有对子节点的引用并且子节点持有对父节点的引用。在这种情况下使用智能指针会产生循环依赖,这意味着你的对象永远不会被破坏。