【发布时间】:2013-12-04 11:21:47
【问题描述】:
我需要一个对象的单一所有权,因为我需要能够按需销毁它(这有时是有道理的;在这种情况下,对象代表一个登录会话,出于安全原因,用户想要关闭该会话) .我们称这个对象为session。其他客户端对象保留对session 的引用,但当然,当客户端访问该引用时,它可能已失效。
我所追求的是一个“安全引用”,它在原始对象被销毁时得到通知,并优雅地向客户端报告(异常,布尔值),而不是段错误。
这样的事情存在吗?最好使用标准 C++/Boost 中可用的内容。最好是 C++03。 shared_ptr 和 weak_ptr 几乎是我所追求的,只要 shared_ptrs 没有延长 session 的生命周期。我需要保证 session 已被销毁,而流浪的 shared_ptr 会阻止这种情况发生。
【问题讨论】:
-
根据所有权标准,您似乎更想要
std::unique_ptr。不幸的是,它不可能在 C++03 中实现,所以没有 Boost 等价物。 -
这个东西有一个设计模式
-
@JoachimPileborg 这可能行得通。删除器可以将 shared_ptr 指向“session_health”对象,该对象在删除时设置为“dead”。可惜我在 C++03 中没有
unique_ptr。 -
@Nik 真的吗?如何强制销毁
session对象。
标签: c++ reference smart-pointers