我有一个大型应用程序,其中任务部分是建模对象,另一部分是时间轴支持的对象动画。用户可能会在时间轴仍然为其设置动画时删除可动画对象。
时间轴通过智能指针访问(动画)对象,因此在使用之前通过检查智能指针的有效性来检查对象是否存在是非常容易的。但这感觉有点'脏'......就像用安全带固定行李一样。但无论我们讨论的其他机制是否大致相同:一个对象在其他地方注册并在删除时取消注册,这正是智能指针所做的事情。
这是否是测试智能指针有效性的有效用例?
答案 0 :(得分:1)
在我看来,std :: weak_ptr对这项工作有好处。弱指针不会保证指针下存在对象,如果对象将被删除,则其他对象将被引用以获取可强制对象。总是要使用这个指针,它必须被锁定(强制检查它的存在)。
答案 1 :(得分:1)
我在这里看不到你如何使用std::shared_ptr
,因为它是Observer Effect problem(通过测试某些东西,你正在改变它)。如果对某个对象持有std::shared_ptr
,则根据定义它将是有效的。
OTOH,有std::weak_ptr
,它是为此目的而建造的。它仅作为shared_ptr
的观察者。
std::weak_ptr
是一个智能指针,它包含对由std :: shared_ptr管理的对象的非拥有(“弱”)引用。必须将其转换为std :: shared_ptr才能访问引用的对象。
如果您的程序是多线程的,顺便说一下,您需要通过其他机制(例如,锁定)来处理有人在您观察对象时删除对象的情况。