首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >禁用从std::weak_ptr到std::shared_ptr的转换

禁用从std::weak_ptr到std::shared_ptr的转换
EN

Stack Overflow用户
提问于 2014-07-30 13:11:15
回答 1查看 259关注 0票数 0

我知道我可以像这样“推广”weak_ptrshared_ptr

代码语言:javascript
复制
// std::weak_ptr<T> weak;
std::shared_ptr<T> promoted(weak);

我的问题是:能不能以某种方式防止这种情况发生?

作为一个练习,我想要创建我自己的、非常简单的WeakPtrFactory实现。它是以this作为类成员启动的,然后生成weak_ptr,一旦对象被销毁,就会失效。我的尝试只是使用shared_ptr作为私有成员,并返回使用它创建的weak_ptr(仅为以防万一不传递op删除器)。但是,它有明显的缺点,因为每个人都可以将其推广到shared_ptr,破坏整个机制。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-31 09:22:35

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25037730

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档