0

我知道我可以“促进”weak_ptr喜欢shared_ptr这样:

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

我的问题是:可以以某种方式防止这种情况吗?

作为一个练习,我想创建我自己的WeakPtrFactory的非常简单的实现。它this作为类成员启动,然后 spawnweak_ptr将在对象销毁时失效。我的尝试只是用作shared_ptr私有成员并返回weak_ptr用它创建的 s(以防万一,不传递操作删除器)。但它有明显的缺点,因为每个人都可以将它们提升回shared_ptr并打破整个机制。

4

1 回答 1

0

遵循@user2357112 的建议,我在需要时std::weak_ptr在内部创建std::shared_ptr并在使用后立即销毁它。

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

于 2014-07-31T09:22:35.853 回答