我想知道您是否认为以下代码通常表示设计不好...
class X
{
public:
...
private:
Y y;
};
Class Y
{
public:
Y( X& value ){ x = value; };
private:
X& x;
}
(即,类X和Y之间存在某种循环依赖关系)。
最佳答案
不,我不认为这是不好的设计。它看起来像一个父子关系(1对1),其中子项有一个指向父项的指针。
进行这种设计的主要原因是,如果有人可以通过Y
获得对X
的引用。如果仅通过Y
对X
的所有访问都可以进行,那么这样的引用就更值得怀疑了。
正如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/