首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用智能指针进行观察

使用智能指针进行观察
EN

Stack Overflow用户
提问于 2015-07-04 21:08:33
回答 2查看 197关注 0票数 0

我有一个大型的应用程序,其中任务部分是建模对象,另一部分是时间轴支持的对象动画。用户可能会在时间线还在动画时删除可动画对象。

时间线通过智能指针访问(动画)对象,因此在使用前检查智能指针是否有效是非常容易的。但这感觉有点“脏”..。比如用安全带来装行李。但是,我们讨论过的任何其他机制或多或少都是一样的:一个对象在其他地方注册,删除时注销自己,这正是智能指针所做的事情。

这是测试智能指针有效性的有效用例吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-04 21:13:36

在我看来,std::weak_ptr对这份工作会有好处。弱指针不能保证指针下的对象的存在,如果要删除对象,它将被其他引用可动对象的对象所知。总是要使用这个指针,它必须被锁定(强制检查它的存在)。

票数 1
EN

Stack Overflow用户

发布于 2015-07-04 21:14:42

在这里,我不知道如何使用std::shared_ptr,因为它是一个观测器效应问题 (通过测试某些东西,您正在修改它)。如果将std::shared_ptr保存到对象,则定义它将是有效的。

OTOH,有std::weak_ptr,它正是为此目的而建的。它仅作为shared_ptr的观察员。

std::weak_ptr是一个智能指针,它保存对由std::shared_ptr管理的对象的非所有者(“弱”)引用。为了访问引用的对象,必须将其转换为std::shared_ptr。

顺便说一句,如果您的程序是多线程的,那么您需要通过其他机制(例如锁定)来处理在观察对象时有人删除对象的情况。

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

https://stackoverflow.com/questions/31225111

复制
相关文章

相似问题

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