【发布时间】:2013-04-11 17:03:48
【问题描述】:
与之前的question相关,我现在有以下一个:
在接下来的风景中:
class B;
class A
{
// stuff, methods and so on
B b;
};
class B
{
// stuff, methods and so on
A a;
};
这里我们在A 和B 之间存在循环依赖关系,但是由于B 是一个不完整的类型,所以这段代码格式不正确。一种解决方案是通过B 的指针更改B,例如通过智能指针。但是添加指针会增加复杂性和不必要的资源消耗,因为您不需要指针!
在之前的question中,我试图通过模板来避免使用指针,所以我在定义了两个类的地方延迟了类的实例化,但是我无法成功。
避免指针是不可能的吗?是否有众所周知的设计来避免循环依赖?
【问题讨论】:
-
如果它编译了,这甚至没有意义。你说的是
A的实例包含B的实例,但B的实例也包含A的实例。您将需要无限量的内存和无限量的时间来创建这样的对象。也就是说,A的构造函数和B的构造函数都会无限递归。 -
你为什么要避免指针?
-
你也可以使用引用。
-
或
std::unique_ptr,以避免讨厌的原始指针。 -
问问自己,
sizeof(A)或sizeof(B)是什么?如果你不能用有限的数字回答这个问题,那么你就有了一个格式错误的类。那是你绝对应该考虑使用指针和引用的时候。