13

有谁知道惰性初始化伙伴的实现shared_ptr并与weak_ptr它一起实现?课程的要求是:

  • lazy_ptr允许客户端稍后(如果有的话)构造对象的类,而不需要构造函数实现

  • 具有三种可能状态的weak_lazy_ptr类:尚未构造(不会锁定到 a shared_ptr)、构造(将锁定到 a shared_ptr)和已销毁(不会锁定到 a shared_ptr

我创建了一些不久前没有完全完成这项工作的类(请参阅此处的 CVu 文章),它们使用shared_ptrweak_ptr在它们的实现中使用。使用共享指针和弱指针而不是与它们集成的模型的主要问题如下:

  1. 一旦所有lazy_ptr对象超出范围,任何弱引用都不能再被锁定,即使其他客户端持有shared_ptr版本

  2. 无法控制在不同线程上构建对象

我很感激任何关于协调这些问题的其他尝试的指针,或者这个领域可能正在进行的任何工作。

4

1 回答 1

2

要创建不需要参数的延迟构造:

boost::bind( boost::factory<T*>(), param1, param2 )将创建一个函数对象,在new T(param1, param2)构造时不需要参数就可以执行等效的操作。

要创建一个支持这种延迟构造的 shared_ptr:

将您的工厂与标准捆绑在一起boost::shared_ptr(例如,在您创建的类中),您将获得您描述的结果,包括适当的weak_ptr功能......

无论客户端触发延迟构造的代码都应该运行:

your_shared_ptr.reset( your_factory() );

无论触发对象销毁的代码都应该运行:

your_shared_ptr.reset();

共享指针将true仅在对象的生命周期内进行评估。如果您希望区分“尚未构建”和“已销毁”,您可以在工厂运行后设置一个布尔值。

于 2012-01-11T22:09:19.433 回答