我有一个大型的应用程序,其中任务部分是建模对象,另一部分是时间轴支持的对象动画。用户可能会在时间线还在动画时删除可动画对象。
时间线通过智能指针访问(动画)对象,因此在使用前检查智能指针是否有效是非常容易的。但这感觉有点“脏”..。比如用安全带来装行李。但是,我们讨论过的任何其他机制或多或少都是一样的:一个对象在其他地方注册,删除时注销自己,这正是智能指针所做的事情。
这是测试智能指针有效性的有效用例吗?
发布于 2015-07-04 21:13:36
在我看来,std::weak_ptr对这份工作会有好处。弱指针不能保证指针下的对象的存在,如果要删除对象,它将被其他引用可动对象的对象所知。总是要使用这个指针,它必须被锁定(强制检查它的存在)。
发布于 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。
顺便说一句,如果您的程序是多线程的,那么您需要通过其他机制(例如锁定)来处理在观察对象时有人删除对象的情况。
https://stackoverflow.com/questions/31225111
复制相似问题