让我们假设我有一个类A和B。B获得了A的实例作为构造函数参数。 A类必须使用B的某些方法,因此在A中有一个类似这样的创建:new B(this)
。这是不好的做法吗?
我很困惑,因为我认为包含对象应该是单向的,并且包含对象不应该知道包含它的对象。
答案 0 :(得分:0)
您可以考虑在类A
内嵌套类B
。这样,类A可以访问类B的成员。或者声明A是B的朋友。那么您就无需动态创建副本。
答案 1 :(得分:0)
这种情况对应于UML情况,其中A和B是两个类别,并且两个方向都可以导航。
这没什么错。唯一的问题是这两个类是紧密耦合的(没有另一个就不可能存在)。如果您有更多需要分享的见解,我们可以考虑是否有更好的模式来避免这种情况。但是有时候只是需要。
似乎A拥有B对象。在这种情况下,使B对象成为A的成员可能会更容易,以避免手动进行内存管理。但是,如果由于某种原因或其他原因(例如,多态B)而无法执行操作,则可以考虑使用unique_ptr<B>
而不是原始指针。这个智能指针将解决B的破坏问题,并最终避免一些讨厌的问题(尤其是如果您未遵循3的规则)。