我感到惊讶的是,使用std::weak_ptr的人并不认为将onDelete处理程序绑定到他们的引用是有用的。我在boost上到处寻找,但我没有找到这样的东西。
我是不是遗漏了什么?“臭味”依赖于这样的东西吗?或者出于某种原因,它太小众而不能普遍使用?
发布于 2021-07-15 13:42:06
shared_ptr的实现基本上只是一个指针和一个原子引用计数,创建和销毁shared_ptr实例只涉及递增和递减引用计数,因此非常快,并且不需要互斥锁。
为了实现您的方案,shared_ptr将需要以某种方式跟踪所有weak_ptr实例,这将使其更昂贵,并可能需要互斥锁,因为这不是一个广泛需要的要求,它不值得成本。
你可以在你的shared_ptr上使用一个自定义的删除器,当创建你的weak_ptr时,使用get_deleter来访问删除器并向它注册一个回调。
https://stackoverflow.com/questions/68386926
复制相似问题