【发布时间】:2012-01-11 20:20:24
【问题描述】:
有人知道shared_ptr 和weak_ptr 的实现以及惰性初始化伙伴吗?课程的要求是:
一个
lazy_ptr类,允许客户端稍后(如果有的话)构造对象,而不需要构造函数实现具有三种可能状态的
weak_lazy_ptr类:尚未构造(不会锁定到shared_ptr)、构造(将锁定到shared_ptr)和已销毁(不会锁定到shared_ptr)
我创建了一些不久前没有完全完成这项工作的类 (see CVu article here),它们在实现中使用了 shared_ptr 和 weak_ptr。使用共享指针和弱指针而不是与它们集成的模型的主要问题如下:
一旦所有
lazy_ptr对象超出范围,任何弱引用都不能再被锁定,即使其他客户端持有shared_ptr版本无法控制不同线程上的对象构造
如果您能指出解决这些问题的其他尝试,或者该领域可能正在进行的任何工作,我将不胜感激。
【问题讨论】:
-
听起来很像
shared_ptr<boost::optional<T>>,对吗? -
@user1078210 或许你可以找到更多信息here。
-
@GMan:
boost::optional确实 允许延迟构造,但boost::shared_ptr也允许这样做,所以两者都不需要,如果我理解你的话。 -
@DrewDormann:不完全是。不同的是,在 optional 初始化时,所有的
shared_ptr都指向了初始化的对象。 -
@GMan:没错。我没有想到那种情况。
标签: c++ shared-ptr lazy-initialization weak-ptr