我知道我可以"促进"这样weak_ptr
到shared_ptr
:
// std::weak_ptr<T> weak;
std::shared_ptr<T> promoted(weak);
我的问题是:能以某种方式阻止吗?
作为练习,我想创建自己的veeery简单实现WeakPtrFactory。它以this
作为类成员启动,然后生成weak_ptr
s,它将在对象的破坏中失效。我的尝试只是使用shared_ptr
作为私有成员并返回使用它创建的weak_ptr
(以防万一删除操作)。但它有明显的劣势,因为每个人都可以将它们推回shared_ptr
并打破整个机制。
答案 0 :(得分:0)
关注@ user2357112建议我已经包裹std::weak_ptr
在需要时在内部创建std::shared_ptr
并在使用后立即将其销毁。
我应该澄清一下,我想要实现的是this concept的简化版本。虽然它具有相似的名称,但WeakPtr
与shared_ptr
的用例具有不同的用例。它用于以非线程安全的方式检查某个对象是否被销毁,以便我们可以适当地采取措施。程序员有责任确保如果对象仍然存在,他可以安全地使用它(例如,通过强制检查它的存在并在同一个线程上调用它的方法)。