C++中的循环引用,没有指针

Mic*_*hel 5 c++ pointers circular-reference

有没有办法在不使用指针的情况下定义循环引用?

我需要有这样的事情:

struct A;
struct B {
    A a;
};

struct A {
    B b;
};
Run Code Online (Sandbox Code Playgroud)

谢谢!

Fil*_*ara 15

不,没有.这种结构将具有无限大小.

您可以使用智能指针(shared_ptrweak_ptr)来避免直接指针操作,但这就是它.


Jar*_*Par 13

您可以改用引用

struct A;
struct B {
  A& a;
};

struct A {
  B b;
};
Run Code Online (Sandbox Code Playgroud)

但是,如果没有某种程度的间接,就不可能创建循环引用.你的样本正在做什么甚至没有创建循环引用,它试图创建一个递归定义.结果将是无限大小的结构,因此不合法.


Chr*_*isW 7

这怎么可行?如果我没记错的话,一旦设置就无法修改引用的地址值,因此无法定义循环引用.

它可以像下面一样工作(与Jared的示例加上构造函数定义相同):

struct A;

struct B {
  A& m_a;
  B(A& a) : m_a(a) {}
};

struct A {
  B m_b;
  //construct B m_b member using a reference to self
  A() : m_b(*this) {}
  //construct B m_b member using a reference to other
  A(A& other) : m_b(other) {}
};
Run Code Online (Sandbox Code Playgroud)