我想知道您是否认为以下代码通常表示设计不好...

class X
{
public:
  ...
private:
  Y y;
};

Class Y
{
public:
   Y( X& value ){ x = value; };
private:
   X& x;
}

(即,类X和Y之间存在某种循环依赖关系)。

最佳答案

不,我不认为这是不好的设计。它看起来像一个父子关系(1对1),其中子项有一个指向父项的指针。

进行这种设计的主要原因是,如果有人可以通过Y获得对X的引用。如果仅通过YX的所有访问都可以进行,那么这样的引用就更值得怀疑了。

正如Billy ONeal指出的那样,一个示例可能是一个迭代器,它需要能够引用它所属的集合。这样可以在数组调整大小时使迭代器进入数组,而该迭代器不需要无效,因为它将在每次访问时检查数组的当前缓冲区地址和当前大小。

另一个示例可以是OrderLine类(您的X),其中包含对商品的引用和数量计数等。它还具有DigitalLicense类型(您的Y)的可选成员。 DigitalLicense包含许可证的大型加密描述,因此仅包含在与具有数字许可证的产品相对应的OrderLines中。

在构建时,对DigitalLicense的引用也被放在单独的映射中,键入许可证ID。现在可以根据 map 中的许可证ID查找DigitalLicense。然后使用反向引用从DigitalLicense转到OrderLine。如果OrderLine具有类似的反向引用,则也可以返回到Order

关于c++ - 以下内容表明设计不好吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2981593/

10-10 21:36