gpt4 book ai didi

c++ - 智能指针/编码模式的名称

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:35:33 26 4
gpt4 key购买 nike

最近我经常遇到需要类似于此数据结构的情况。

限制:C++03 标准。


 +-----+--------------+               +----+
|node0| NodeDataRef ->-------------->|data|
+-----+--------------+ +----+
+-----+--------------+ ^^ ^
|node1| NodeDataRef ->----------------+| |
+-----+--------------+ | |
+-----+--------------+ | |
|node2| NodeDataRef ->-----------------+ |
+-----+--------------+ |
|
+-----+--------------+ |
|root | RootDataRef ->-------------------+
+-----+--------------+
  1. 有几个Node类,其中每个 Node持有 NodeDataRef “引用”(想想 shared_ptr )到“Data ”的同一个实例(类,结构,任何 - 动态分配)。
  2. 还有一个“Root”或“主”节点/类持有RootDataRef引用(这一次,想想 weak_ptr )相同的“Data ”。
  3. 当所有Node s 被破坏,data也被摧毁了RootDataRef设置为 0/NULL . IE。 NodeDataRef就像shared_ptr<Data>RootDataRef就像weak_ptr<Data>
  4. 但是根节点可以强制销毁数据,即使还有事件的NodeDataRef秒。在这种情况下所有 NodeDataRef指向数据的 s 被设置为 NULL/0RootDataRef也设置为 0/NULL .

weak_ptr<Data>可以强制破坏所有链接shared_ptr<Data> .

  1. 这个模式/智能指针类型有名字吗?
  2. 我如何使用 Boost 或 Qt 4快速实现它? (“快速”意味着无需编写类来维护引用列表)

最佳答案

Does this pattern/smart pointer type has a name?

据我所知,不,这不是具有常用名称的典型所有权模式。

How can I quickly implement this using either Boost or Qt 4? ("quickly" means without writing a class to maintain list of references)

此用例没有预先打包的所有权政策,因为这会破坏共享所有权的意义。如果存在多个指向给定对象的共享指针,根据定义,这些共享指针必须使该对象保持事件状态。如果我得到一个共享指针,则可以保证该对象在我释放它之前一直存在。

如果你希望一个主对象能够命令销毁指向的对象,而不管其他对象是否持有指向它的共享指针,那么你将不得不想出一些单独的机制来让它命令一个对象的所有持有者共享指向该对象的指针以释放它。

更新:

虽然存在“hacky”解决方案可以使这项工作“快速”,但我不建议您使用其中任何一个。当有人阅读您的代码(包括从现在起几个月后的您)时,您希望这种模式非常不典型,您希望它是明显的

你的意图应该通过主对象和其他所有者之间的显式通信模式来明确,而不是隐藏在包装器、自定义删除器或其他任何东西中的某个地方。

关于c++ - 智能指针/编码模式的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15598481/

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