我知道这听起来很荒谬,weak_ptrs
与unique_ptrs
,但请忍受我。是否将weak_ptr与unique_ptr配对是一个好主意?
我有一组小部件和动画对它们起作用。小部件有一个明确的所有者,他们创建并销毁它们。所有的小部件都是在一个线程中创建,销毁和动画的,所以在动画代码运行时不能销毁一个小部件。正如你所看到的,这些小部件是以某种方式与动画共享的,但是如果小部件被删除,动画应该停止。
当前的方法是使用std::unique_ptr
作为窗口小部件的所有者,并将它们暴露为动画的原始指针。这使得查找/调试悬挂指针非常困难。一个提议是在所有者类中更改为std::shared_ptr
,并将std::weak_ptrs
显示为动画,但这会在系统中添加一些不需要/不需要的开销。
是否有可能(一个好主意?)在std::unique_ptr
的顶部创建某种weak_ptr,只标记指针已被删除?如果是的话,你可以给我建议一些实现,对于单线程使用来说花费最小。
编辑:
一个更澄清 - 该部件在一个线程中使用,但应用程序有多个线程。同时还有许多动画并行运行,每个动画更新60次/秒。来自std::shared_ptr/std::weak_ptr
的开销来自std::shared_ptr
内部使用的(原子)计数器,在这种情况下实际并不需要。
编辑:
我不是问我是否可以使用std::weak_ptr
与std::unique_ptr
,我知道这是不可能的。我问,如果它是一个好主意/可以建立类似的行为作为东西是std::weak_ptr
可以std::unique_ptr
我想你可以使用一个唯一的指针与一个定制的删除器,可以跟踪不太弱的指针。尽管如此,我看不出如何比'shared_ptr'少开销。我只是使用'shared_ptr',因为那正是你想要的。 –
但相反,您是通过制定自己独特的弱ptr解决方案来增加开销,这是否好? –
'开销来自(原子)计数器,在这种情况下实际上并不需要。'是的,你需要一些(原子)值来查看指针是否有效,原子布尔(标志)与原子计数器没有多大区别。 – KillianDS