0

我在执行以下操作时收到此错误:

A类;B类;

类 A {
B b_obj ; //这里出现错误
...
}

B类 {
...
A a_object;
...
}

我观察到的一件事是,如果我将 B 类向上移动,那么它会被删除,但由于我使用的是双向链接,它在 B 中也有 A 类的对象,因此我无法摆脱这两个错误。

4

2 回答 2

1

它被称为循环依赖问题。有关如何解决它的详细信息,请参阅这个很好的答案。

于 2013-10-08T16:58:29.537 回答
0

循环依赖

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)

于 2013-10-08T18:11:53.537 回答