我知道我可以像这样“推广”weak_ptr到shared_ptr:
// std::weak_ptr<T> weak;
std::shared_ptr<T> promoted(weak);我的问题是:能不能以某种方式防止这种情况发生?
作为一个练习,我想要创建我自己的、非常简单的WeakPtrFactory实现。它是以this作为类成员启动的,然后生成weak_ptr,一旦对象被销毁,就会失效。我的尝试只是使用shared_ptr作为私有成员,并返回使用它创建的weak_ptr(仅为以防万一不传递op删除器)。但是,它有明显的缺点,因为每个人都可以将其推广到shared_ptr,破坏整个机制。
发布于 2014-07-31 09:22:35
按照@user2357112的建议,我包装了std::weak_ptr,在需要时在内部创建std::shared_ptr,并在使用后立即销毁它。
我可能应该澄清一下,我想要实现的是这一概念的简化版本。尽管WeakPtr的名称与shared_ptr的名称类似,但它的用例与shared_ptr的名称不同。它用于以非线程安全的方式检查某个对象是否已被销毁,以便我们能够适当地采取行动。程序员有责任确保如果对象仍然活着,他可以安全地使用它(例如,强制检查它的存在并在同一个线程上调用它的方法)。
https://stackoverflow.com/questions/25037730
复制相似问题