c++中的共享指针、弱指针和惰性指针

shared, weak and lazy pointers in C++

本文关键字:指针 共享 c++      更新时间:2023-10-16

有人知道shared_ptrweak_ptr与惰性初始化伙伴一起实现吗?类的要求是:

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

  • 具有三种可能状态的weak_lazy_ptr类:未构建(不会锁定到shared_ptr),构建(将锁定到shared_ptr)和销毁(不会锁定到shared_ptr)

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

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

  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。如果你想区分"尚未构建"answers"已销毁",你可以在工厂运行后设置一个bool值。