最近我经常遇到需要类似于这种数据结构的东西的情况。
限制:C++03 标准。
+-----+--------------+ +----+
|node0| NodeDataRef ->-------------->|data|
+-----+--------------+ +----+
+-----+--------------+ ^^ ^
|node1| NodeDataRef ->----------------+| |
+-----+--------------+ | |
+-----+--------------+ | |
|node2| NodeDataRef ->-----------------+ |
+-----+--------------+ |
|
+-----+--------------+ |
|root | RootDataRef ->-------------------+
+-----+--------------+
- 有几个
Node
类,每个类都Node
持有对“ ”(类、结构等——动态分配) 的同一个实例的NodeDataRef
“引用”(想想)。shared_ptr
Data
- 还有一个“
Root
”或“主”节点/类包含对相同“ ”的RootDataRef
引用(这次,认为) 。weak_ptr
Data
- 当所有
Node
s 被销毁时,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快速实现这一点?(“快速”意味着无需编写类来维护引用列表)