C ++中的shared_ptr
来解决问题,当多个对象拥有对象的所有权时会多次删除。它只通过最后一次删除来实现。
当一个对象想要所有权但又不想延迟删除时,该指针还有另一种风格,因此它需要一个弱指针,当它被删除时会通知他以防止出现问题。
还有另一种方法。不要只进行最后一次删除,只进行第一次删除,并通知其余的对象,就像弱指针一样。
这对于像连接这样的对象很有用,如果一端释放它,它应该被销毁,而另一端知道这一点
在C ++或Boost中有这样的东西吗?
答案 0 :(得分:0)
此模式可以使用单个共享的互斥shared_ptr
建模,仅用于创建和销毁对象,并为每个客户端/端点使用weak_ptr
,用于访问。
请注意,这样的方案会导致过度锁定,并且可能无法提供您想要的语义。在使用过程中,您需要lock
weak_ptr
,这会触及shared_ptr
内部互斥锁。当一方破坏主shared_ptr
实例时,该对象在任何读取操作完成时仍然存在。
更传统的解决方案是通过频道本身传输挂断信息。
答案 1 :(得分:0)
有几种类型的通知:
根据您的真实需要,实施可能会有很大差异。
后者(按需)已经通过典型的shared_ptr
/ weak_ptr
二分法提供:当通过weak_ptr
访问对象时,您将知道它是否已被删除同时
另外两个可以通过传统shared_ptr
之上的Observer模式实现,但是它们具有复杂性和性能影响,所以在使用之前我会确保需要是真实的。