具有无效值的Init引用

时间:2012-07-01 10:19:35

标签: c++ reference

我有一个班级:

class node
{
public:

   node& parent;
}

当我知道正确的值时,我想设置parent值:

node parent;
...

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

但我必须在构造函数中设置它的值。我该怎么办?

2 个答案:

答案 0 :(得分:3)

您无法更改引用引用的变量。因此,如果您无法在构造函数中初始化它,则不需要引用。您可以使用常规指针,但最好使用适合您特定用途的某种智能指针。正确答案主要取决于如何管理引用对象的生命周期。

答案 1 :(得分:2)

如果你想使用引用而不是指针,因为你想建议类实例不拥有父节点,那么你可以使用C ++ 11的<functional>中的std::reference_wrapper

我建议不要使用智能指针(除了std::weak_ptr除外),如果父对象持有对子节点的引用并且子节点持有对父节点的引用。在这种情况下使用智能指针会产生循环依赖,这意味着你的对象永远不会被破坏。