我有一个设计,其中对象同时由2个队列拥有。有时队列本身可能会被删除。在这种情况下,必须删除队列中的所有对象,并将其从其所在的其他队列中删除。
当前的解决方案让拥有的对象了解两个拥有的队列,但这会引入丑陋的耦合。
是否有智能指针类可以帮助我?构造可以是“新”或现有指针的副本。销毁会删除拥有的资源。访问就像一个weak_ptr,可以指向null。
我想它可能需要一个特定的'destroy'方法,以确保指针的临时副本没有释放资源。
有谁知道这样的事情?
谢谢, 托尼
答案 0 :(得分:1)
您希望删除排队对象以将其从其他队列中删除,而不将其耦合到队列。
避免这种耦合的一种方法是将标记对象删除,而不实际删除它。
答案 1 :(得分:0)
一般来说,在参考周期存在的情况下,没有任何可重复使用的解决方案来引用计数。有解决方案,但它们要么特定于允许的参考周期模式,要么是垃圾收集器。从描述问题的方式来看,您需要能够找出给定队列拥有的对象(因此您可以删除队列)以及拥有给定对象的队列(因此您可以从所有队列中删除对象)。所以你有参考周期。
为了修复丑陋的耦合问题,我建议让队列包含代理对象,每个代理对象拥有真实对象,并知道哪些队列拥有它。队列方法将使用和更新这些代理对象。