禁止从std :: weak_ptr转换为std :: shared_ptr

时间:2014-07-30 13:11:15

标签: shared-ptr weak-ptr

我知道我可以"促进"这样weak_ptrshared_ptr

// std::weak_ptr<T> weak;
std::shared_ptr<T> promoted(weak);

我的问题是:能以某种方式阻止吗?

作为练习,我想创建自己的veeery简单实现WeakPtrFactory。它以this作为类成员启动,然后生成weak_ptr s,它将在对象的破坏中失效。我的尝试只是使用shared_ptr作为私有成员并返回使用它创建的weak_ptr(以防万一删除操作)。但它有明显的劣势,因为每个人都可以将它们推回shared_ptr并打破整个机制。

1 个答案:

答案 0 :(得分:0)

关注@ user2357112建议我已经包裹std::weak_ptr在需要时在内部创建std::shared_ptr并在使用后立即将其销毁。

我应该澄清一下,我想要实现的是this concept的简化版本。虽然它具有相似的名称,但WeakPtrshared_ptr的用例具有不同的用例。它用于以非线程安全的方式检查某个对象是否被销毁,以便我们可以适当地采取措施。程序员有责任确保如果对象仍然存在,他可以安全地使用它(例如,通过强制检查它的存在并在同一个线程上调用它的方法)。