gpt4 book ai didi

c++ - 自引用类

转载 作者:行者123 更新时间:2023-11-28 01:34:06 25 4
gpt4 key购买 nike

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

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

#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++,令我惊讶的是编译器允许我传递对我尚未构造的对象的引用。这是正确的方法吗?

最佳答案

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

Obj() : parent(*this) { }

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

Obj base;

关于c++ - 自引用类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50122610/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com