最近我经常遇到需要类似于这种数据结构的东西的情况。
限制:C++03 标准。
+-----+--------------+ +----+
|node0| NodeDataRef ->-------------->|data|
+-----+--------------+ +----+
+-----+--------------+ ^^ ^
|node1| NodeDataRef ->----------------+| |
+-----+--------------+ | |
+-----+--------------+ | |
|node2| NodeDataRef ->-----------------+ |
+-----+--------------+ |
|
+-----+--------------+ |
|root | RootDataRef ->-------------------+
+-----+--------------+
- 有几个
Node类,每个类都Node持有对“ ”(类、结构等——动态分配) 的同一个实例的NodeDataRef“引用”(想想)。shared_ptrData - 还有一个“
Root”或“主”节点/类包含对相同“ ”的RootDataRef引用(这次,认为) 。weak_ptrData - 当所有
Nodes 被销毁时,data也被销毁并RootDataRef设置为0/NULL。即NodeDataRef行为像shared_ptr<Data>和RootDataRef行为像weak_ptr<Data> - 然而,即使仍有活动
NodeDataRef的 s,根节点也可以强制销毁数据。在这种情况下,所有NodeDataRef指向数据的 s 都设置为NULL/0并且RootDataRef也设置为0/NULL。
即weak_ptr<Data>可以强制破坏所有联系shared_ptr<Data>。
- 这种模式/智能指针类型有名称吗?
- 如何使用 Boost 或 Qt 4快速实现这一点?(“快速”意味着无需编写类来维护引用列表)