【发布时间】:2016-10-31 18:00:03
【问题描述】:
当一个对象只有一个父对象时,我们使用组合,它应该关心对象的生命周期。我们在相同情况下使用unique_ptr,但对象可以是nullptr。
当多个外部实体可能需要我们的对象时,我们使用shared_ptr,因此它的生命周期会延长,直到最后一个外部实体失去兴趣。
在这里,我想问另一个人生的情况。 如果对象需要最短几个持续时间怎么办?
这是一个例子。让我们有一个一次性计时器,它存储一个函子并在计数完成后执行它。这对我来说很有意义*,这个计时器对象在以下情况下被销毁:
1. fulfilling its task - therefore it should be able to destroy istelf
or
2. the parent loosing interest in the timer - so the parent should be able to
destroy the object as well
目前,我使用了一个带有唯一指针的笨拙实现。这个问题的一个好的模式/指南/实现是什么?
* 原因:1) 仿函数可能拥有一些其他资源 2)定时器可能已经设置为一个非常大的数字,然后放弃 3)如果父级已经被销毁,我们一般不想调用它的回调
【问题讨论】:
-
这与线程取消有很多共同点,当你计算一些东西以响应网络请求时,连接被突然终止。完成计算不会导致任何损坏,但会浪费资源。
标签: c++ c++11 object-lifetime