我在执行以下操作时收到此错误:
A类;B类;
类 A {
B b_obj ; //这里出现错误
...
}
B类 {
...
A a_object;
...
}
我观察到的一件事是,如果我将 B 类向上移动,那么它会被删除,但由于我使用的是双向链接,它在 B 中也有 A 类的对象,因此我无法摆脱这两个错误。
它被称为循环依赖问题。有关如何解决它的详细信息,请参阅这个很好的答案。
循环依赖
struct A { B b; };
struct B { A a; };
永远不会编译。A 不知道 B 的大小,反之亦然(一个在另一个之前声明)。
现在你可能会想写(使用前向声明)
struct A { std::shared_ptr<B> b; };
struct B { std::shared_ptr<A> a; };
它将编译并(可能/将)引入内存泄漏(a 指 b,反之亦然)。
因此,问题是:A 拥有 B 还是 B 拥有 A - 或者甚至另一个 C 类拥有两者。
(拥有定义的所有权,您可能只使用 new/delete 而不是 shared_ptr)