c++中的共享指针、弱指针和惰性指针
shared, weak and lazy pointers in C++
有人知道shared_ptr
和weak_ptr
与惰性初始化伙伴一起实现吗?类的要求是:
-
一个
lazy_ptr
类,允许客户端稍后(如果有的话)构造对象,而不需要构造函数实现 -
具有三种可能状态的
weak_lazy_ptr
类:未构建(不会锁定到shared_ptr
),构建(将锁定到shared_ptr
)和销毁(不会锁定到shared_ptr
)
我之前创建了一些类,它们在实现中使用了shared_ptr
和weak_ptr
,但并没有完全完成这项工作(参见这里的CVu文章)。使用共享指针和弱指针而不是与它们集成的模型的主要问题如下:
-
一旦所有
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() );
触发对象销毁的代码应该运行:
your_shared_ptr.reset();
共享指针只会在对象的生命周期内求值为true
。如果你想区分"尚未构建"answers"已销毁",你可以在工厂运行后设置一个bool值。
- 如何从具有移动语义的类对象中生成共享指针
- 使用共享指针的函数调用,其对象应为 const
- 共享指针和具有自定义删除程序的唯一指针之间的语法差异背后的任何原因
- 如何访问由共享指针保存的类方法?
- 从矢量或地图中删除共享指针
- 使用共享指针时,从共享指针本身释放内存的机制是什么
- 使用共享指针实现复制 c'tor?
- C++/QT:使用指向私有成员的常量指针作为只读数据共享
- 共享指针继承,而不先显式强制转换
- 如何检查类中共享指针的有效性?
- 共享 C++ 的数据成员指针
- std::排序在共享指针的向量上
- 将相同共享指针的副本存储在不同的向量中是否是一种好的做法?
- 在什么情况下,需要共享智能指针而无法使用唯一指针?
- 嵌套类、继承和C++中的共享指针
- <Base> <Derived> 具有相同原始指针共享引用的 shared_ptr 和 shared_ptr 实例是否计数?
- 重载流<<运算符,用于指针/共享指针和其他类型的
- RAW指针共享_ptr
- 指针共享习语
- 将memmove函数与临时指针共享相同的地址