无限构造函数循环

时间:2019-04-09 16:16:31

标签: c++ oop

设计问题是一种类型的构造函数会创建另一种类型的对象,而其构造函数会再次创建第一种类型的对象。

定义:

class A
{
  A();
  B* b;
}
class B
{
  B();
  A* a;
}

实施:

A::A()
{
  b = new B(); 
}

B::B()
{
  a = new A();
}

对此有什么解决方案?

2 个答案:

答案 0 :(得分:3)

  

设计问题是一种类型的构造函数会创建另一种类型的对象,而其构造函数会再次创建第一种类型的对象。

无限递归的解决方案是不这样做。

要么根本没有(相互)递归,要么在某个时候终止了递归。例如,您可以更改类的设计,以使A创建一个B,但是B不创建一个A

答案 1 :(得分:0)

除非您要对无限事物建模(在这种情况下这是错误的方法),否则数据结构中应该有有限数量的元素。

即使A需要B并且B需要A每个 A都需要{{1 }},每个 B是否需要一个B

  • 否:然后添加一个条件(可能需要添加构造函数参数),该条件会中断链并将其成员设置为A

  • 是:每个nullptr是否都需要一个 new A还是可以使用一个已有的(或者类似的用于另一个方向)?

    • 可以使用现有的:通过现有的BA来打破链条。
    • 必须是新的:您正在建模无限的东西。懒惰地生成数据。