【问题标题】:Which shared pointer should be weak pointer in a ring or a cycle哪个共享指针应该是环或循环中的弱指针
【发布时间】:2015-04-01 07:04:00
【问题描述】:

如果我们有一个父类引用一个子类(共享指针)并且子类也有一个父类的引用(再次使用共享指针),我们必须创建这两个智能指针之一弱指针。

但是我们如何决定这两个指针中的哪一个应该是弱指针呢?

另外当一个弱指针指向0时(当共享计数为0时),是不是一个对象被删除的时候我们可能还需要访问它呢?好的,我知道至少我们知道该对象不存在并且我们不应该尝试访问它,但这是否足够?

【问题讨论】:

  • 你的话 Parent 和 Child 暗示 child-> parent 应该是弱的/不拥有的。没有更多细节可能不能说更多

标签: c++ pointers c++11 smart-pointers weak-ptr


【解决方案1】:

想想物体的升程时间。

如果 Child 不能超过 Parent,则 Parent 持有指向 Child 的共享指针。

共享指针定义了生命周期层次结构。

【讨论】:

    【解决方案2】:

    如果我们有一个父类引用了一个子类 (共享指针)和子类也有一个引用 父类(再次使用共享指针)我们必须制作其中之一 这两个智能指针是弱指针。

    不,您不必必须,如果您认为它适合您的设计,您可以

    但是我们如何决定这两个指针中的哪一个应该是弱的 指针?

    不需要另一个就可以生存和完成工作的对象应该存储弱指针

    同样当弱指针指向 0 时(当共享计数为 0 时), 不是在我们可能仍需要访问权限时删除对象的情况 给它?好的,我知道至少我们知道该对象不存在 并且我们不应该尝试访问它,但这是否足够?

    如果两个对象在他们自己还活着的时候需要彼此活着,那么在每个对象中都保留一个共享指针。当这些对象完成它们的工作后,您只需重置一个共享指针(通常包含在最顶层类中的那个),它将创建一个清理周期,如果您的所有实例没有在其他地方使用,它们都会被正确销毁。

    PS:我发现对这种情况非常有帮助的设计是添加start/stop 成员函数,特别是如果您使用无法在构造函数中调用的enable_shared_from_this,您可以获得更多详细信息这个设计from boost asio's author.

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 2012-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-03-05
      • 1970-01-01
      相关资源
      最近更新 更多