设计问题是一种类型的构造函数会创建另一种类型的对象,而其构造函数会再次创建第一种类型的对象。
定义:
class A
{
A();
B* b;
}
class B
{
B();
A* a;
}
实施:
A::A()
{
b = new B();
}
B::B()
{
a = new A();
}
对此有什么解决方案?
答案 0 :(得分:3)
设计问题是一种类型的构造函数会创建另一种类型的对象,而其构造函数会再次创建第一种类型的对象。
无限递归的解决方案是不这样做。
要么根本没有(相互)递归,要么在某个时候终止了递归。例如,您可以更改类的设计,以使A
创建一个B
,但是B
不创建一个A
。
答案 1 :(得分:0)
除非您要对无限事物建模(在这种情况下这是错误的方法),否则数据结构中应该有有限数量的元素。
即使A
需要B
并且B
需要A
,每个 A
都需要{{1 }},每个 B
是否需要一个B
?
否:然后添加一个条件(可能需要添加构造函数参数),该条件会中断链并将其成员设置为A
。
是:每个nullptr
是否都需要一个 new A
还是可以使用一个已有的(或者类似的用于另一个方向)?
B
或A
来打破链条。