如果我们有一个父类,它引用了一个子类(共享指针),而且子类也引用了父类(再次使用共享指针),我们必须制作这两个智能指针中的一个弱指针。
但我们如何决定这两个指针中的哪一个应该是弱指针?
此外,当弱指针指向0(当共享计数为0时),当我们可能仍需要访问它时,是否删除了对象?好吧,我知道至少我们知道对象不在那里而且我们不应该尝试访问它,但这足够了吗?
答案 0 :(得分:3)
想想对象的生命周期。
如果Child不能使用Parent,那么Parent将拥有一个指向Child的共享指针。
共享指针定义了生命周期层次结构。
答案 1 :(得分:2)
如果我们有一个父类,它引用了一个子类 (共享指针)和Child Class也有一个引用 父类(再次使用共享指针)我们必须做出一个 这两个智能指针是一个弱指针。
不,如果您认为它适合您的设计,则不得 。
但我们如何决定这两个指针中的哪一个应该是弱者 指针?
可以在不需要另一个的情况下生活和完成工作的对象应该存储弱指针
当弱指针指向0(当共享计数为0时)时,是 不是我们可能仍需要访问时删除对象的情况 对吗?好吧,我知道至少我们知道对象不存在 并且我们不应该尝试访问它,但这足够了吗?
如果两个对象在他们自己活着时需要彼此活着,那么在每个对象中保持一个共享指针。当这些对象完成它们的工作时,你只需要重置一个共享指针(通常是最高级别类中包含的那个),它将创建一个清理周期,如果它们没有在别处使用,那么所有实例都会被正确销毁。 / p>
PS:我发现对这种情况非常有帮助的设计是添加start
/ stop
成员函数,尤其是在使用enable_shared_from_this
无法在构造函数中调用的情况下,您可以获得有关此设计的更多详细信息from boost asio's author。