gpt4 book ai didi

c++ - 可以消失的工厂构建的对象的共享指针

转载 作者:搜寻专家 更新时间:2023-10-31 00:44:03 24 4
gpt4 key购买 nike

我有一个资源,比方说一个串口。

  1. 此资源可能不会始终存在,并且会不时更改时间。 (工厂)
  2. 一次只有一个对象可以访问此资源(互斥锁)
  3. 此资源由不同对象共享。 (智能指针)
  4. 此资源可能会由于某些原因自行消失,有人拔掉了“资源”。

我脑子里有一种 UML 设计,看起来像这样:

    <SingleTone>                               <Abstract>
+------------------------------+ +-----------+ +-----+
¦ Factory ¦ *m_pRes ¦ Ressource ¦ <¦-------- ¦ ResA¦
+------------------------------+ <o>----------> +-----------+ +-----+
¦ Ressource* createRessource() ¦ ^ ^
+------------------------------+ ¦ ¦
^ ^ ¦ ¦
<uses> ¦ ¦ +---------+ *m_pRes ¦ ¦
¦ +------¦ ObjectA ¦ < >-----------------+ ¦
¦ +---------+ ¦
¦ +---------+ *m_pRes ¦
+--------¦ ObjectB ¦ < >----------------------+
+---------+

我会让工厂负责“新建/删除”。但是,我面临着一个大问题。当我从工厂调用 delete 并避免悬挂指针时,如何确保所有对象不再指向该资源?我是否还应该实现一种“属性监听器”,当我想从我的工厂中“删除”我的资源时,向所有持有者发出信号它消失并“释放”指针(将其设置为空)?这听起来很复杂,可能有更好的方法......

是的,我会用C++编程...

最佳答案

此问题的众多解决方案之一可以使用 boost weak_ptr .

当资源被销毁时,具有 weak_ptr 数据成员的对象实例会发现资源消失了。在这种情况下,他们要么不执行他们拥有的逻辑,要么从某个来源请求新的引用。

关于c++ - 可以消失的工厂构建的对象的共享指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9521666/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com