我正在建立一个基于树的数据结构,其中有一个不可变的根,每个节点都分配了一个永不改变的父节点。每个节点都需要对父节点的引用。
我决定使用引用而不是指针,并提出以下尝试来检查特定节点是否是根:
#include <cstdio>
class Obj {
public:
Obj &parent;
Obj(Obj &parent) : parent(parent) {}
int hasparent();
};
int Obj::hasparent()
{
return &parent != this;
}
int main()
{
Obj base(base);
Obj child(base);
printf("base.hasparent = %d\n", base.hasparent());
printf("child.hasparent = %d\n", child.hasparent());
printf("child.parent.hasparent = %d\n", child.parent.hasparent());
}
我想要你的批评。它是否正确?由于不熟悉C ++,我真的很惊讶编译器允许我传递对我尚未构造的对象的引用。这是正确的做法吗?
答案 0 :(得分:2)
我没有发现您的代码存在问题。如果你想隐藏&#34;奇怪的初始化&#34; &#34; Obj base(base)&#34;,然后你可以实现默认构造函数来设置父对象本身:
Obj() : parent(*this) { }
然后您可以像这样简单地初始化基础:
Obj base;