自引用类

Self-referencing class

本文关键字:自引用      更新时间:2023-10-16

我正在制作一个基于树的数据结构,其中有一个不可变的根,每个节点都被分配了一个永不改变的父节点。每个节点都需要对父节点的引用。

我决定使用引用而不是指针,并提出了以下尝试来检查特定节点是否是根节点:

#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 = %dn", base.hasparent());
printf("child.hasparent = %dn", child.hasparent());
printf("child.parent.hasparent = %dn", child.parent.hasparent());
}

我想要你的批评。这是对的吗?由于不熟悉C++,我实际上很惊讶编译器允许我传递对尚未构造的对象的引用。这是正确的方法吗?

我认为您的代码没有问题。如果你想隐藏"Obj base(base("的"奇怪的初始化",那么你可以实现默认构造函数来将父级设置为对象本身:

Obj() : parent(*this) { }

然后你可以像这样简单地初始化 base:

Obj base;