定时指针存在吗?

6

有时我需要一种基于时间的智能指针,例如缓存某些庞大的对象,但如果在一定时间内未使用,则自动释放它。当触摸(解引用)指针时,倒计时重新启动,并且如果您需要“锁定”对象以进行计算,则还可以停止倒计时。类似于:

timed_ptr<Type,30> p = new Type(); \\object is deleted after 30 seconds, and pointer set to a checkable 'null' state

...

p.stop_count_down();
// do something with the object, guaranteed it won't expire while we still need it. 
p.start_count_down();

这种类型的内容在boost或其他库中是否存在?

4
似乎将高级概念(时间资源分配)与低级概念(智能对象引用)捆绑在一起,会导致程序非常脆弱且本质上是不确定性的。 - MooseBoys
实现这个应该不难,对吧? - Zereges
1
@MooseBoys 可能吧。它可能是一种需要小心处理的动物,但我想拥有一个并和它玩耍。 - Emerald Weapon
也许你需要的不是这个,而是一个LRU缓存?(我认为30秒或任何其他超时时间可能并没有什么特别之处;相反,当“太多”资源同时被使用时,你想要释放最不可能在不久的将来需要的可消耗资源,对于某个“太多”的值) - Jeremy Friesner
4
计时智能指针听起来像是一个令人头疼的调试问题。 - PerryC
显示剩余5条评论
1个回答

0
我认为通过计时来管理智能指针会失去其优势。最好有一个对象负责管理这些资源,并在需要时从它那里请求资源。否则,在使用指针之前,您需要检查资源是否仍然加载。这正是共享指针的问题所在,其他代码可能会使资源/内存无效,因此您必须始终在使用指针之前验证其资源。

是的,weak_ptr 有一些类似之处。但我的问题不是讨论可能的好处/缺点,而是关于这种对象是否存在于某个地方。 - Emerald Weapon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接