使用这样的模式不好吗?

时间:2019-02-17 17:36:59

标签: c++

让我们假设我有一个类A和B。B获得了A的实例作为构造函数参数。 A类必须使用B的某些方法,因此在A中有一个类似这样的创建:new B(this)。这是不好的做法吗?

我很困惑,因为我认为包含对象应该是单向的,并且包含对象不应该知道包含它的对象。

2 个答案:

答案 0 :(得分:0)

您可以考虑在类A内嵌套类B。这样,类A可以访问类B的成员。或者声明A是B的朋友。那么您就无需动态创建副本。

答案 1 :(得分:0)

这种情况对应于UML情况,其中A和B是两个类别,并且两个方向都可以导航。

这没什么错。唯一的问题是这两个类是紧密耦合的(没有另一个就不可能存在)。如果您有更多需要分享的见解,我们可以考虑是否有更好的模式来避免这种情况。但是有时候只是需要。

似乎A拥有B对象。在这种情况下,使B对象成为A的成员可能会更容易,以避免手动进行内存管理。但是,如果由于某种原因或其他原因(例如,多态B)而无法执行操作,则可以考虑使用unique_ptr<B>而不是原始指针。这个智能指针将解决B的破坏问题,并最终避免一些讨厌的问题(尤其是如果您未遵循3的规则)。