0

shared_ptrC++ 中解决了一个问题,当多个对象获得一个对象的所有权时,多次删除。它通过只进行最后一次删除来做到这一点。
该指针的另一种情况是当一个对象想要所有权但不想延迟删除时,它需要一个弱指针,当它被删除时通知他以防止出现问题。
还有另一种方法可以做到这一点。与其只进行最后一次删除,不如只进行第一次删除,其余的对象应该被通知它发生了,就像弱指针一样。
这对于像连接这样的对象很有用,如果一端释放它,它应该被销毁,而另一端知道这一点。
在 C++ 或 Boost 中有类似的东西吗?

4

2 回答 2

0

这种模式可以用一个共享的、shared_ptr仅用于创建和销毁对象的互斥体和一个weak_ptr用于访问的每个客户端/端点来建模。

请注意,这样的方案会导致过度锁定,并且可能无法提供您想要的语义。您需要lockweak_ptr使用过程中,它触及shared_ptr内部互斥锁。当一侧销毁主shared_ptr实例时,对象在任何读取操作完成时仍然存在。

更传统的解决方案是通过信道本身发送挂断消息。

于 2012-04-28T13:32:39.397 回答
0

有几种类型的通知

  • 同步
  • 异步
  • 按需(不是真正的通知)

根据您真正想要的,实施可能会有很大差异。

后者(按需)已经可以通过典型shared_ptr/weak_ptr二分法获得:通过 访问对象时weak_ptr,您会知道它是否同时被删除。

其他两个可以通过在传统之上的观察者模式来实现shared_ptr,但是它们具有复杂性和性能影响,所以我会在使用它们之前确保需求是真实的。

于 2012-04-28T14:18:28.363 回答