use*_*210 13 c++ shared-ptr weak-ptr lazy-initialization
有没有人知道的实现shared_ptr,并weak_ptr连同延迟初始化的合作伙伴?这些课程的要求是:
一lazy_ptr类是允许客户端后构造对象(如果有的话),而不需要构造函数实现
一个weak_lazy_ptr有三种可能状态的类:尚未构造(不会锁定到a shared_ptr),构造(将锁定到a shared_ptr)和销毁(不会锁定到a shared_ptr)
我创建了一些类,并没有做的工作完全是前一阵子(见这里CVU文章)所使用shared_ptr,并weak_ptr在他们的执行.使用共享和弱指针而不是与它们集成的模型的主要问题如下:
一旦所有lazy_ptr对象超出范围,即使其他客户端持有shared_ptr版本,也无法再锁定任何弱引用
不能控制不同线程上的对象的构造
我很感激任何指向其他解决这些问题的尝试,或者对这个领域可能正在进行的任何工作的任何指示.
要创建不需要参数的延迟构造:
boost::bind( boost::factory<T*>(), param1, param2 )将创建一个函数对象,该函数对象执行new T(param1, param2)与构造时不需要参数相同的操作。
要创建支持此延迟构造的shared_ptr:
将您的工厂与标准捆绑在一起boost::shared_ptr(例如,在您创建的类中),您将获得您所描述的结果,包括适当的weak_ptr功能......
无论什么代码触发客户端的延迟构造都应该运行:
your_shared_ptr.reset( your_factory() );
Run Code Online (Sandbox Code Playgroud)
无论触发对象销毁的代码都应该运行:
your_shared_ptr.reset();
Run Code Online (Sandbox Code Playgroud)
true共享指针仅在对象的生命周期内求值。如果您希望区分“尚未构建”和“已销毁”,您可以在工厂运行后设置一个布尔值。
| 归档时间: |
|
| 查看次数: |
1984 次 |
| 最近记录: |