最近、このデータ構造に似たものが必要な状況に頻繁に遭遇しています。
制限:C++03標準。
+-----+--------------+ +----+
|node0| NodeDataRef ->-------------->|data|
+-----+--------------+ +----+
+-----+--------------+ ^^ ^
|node1| NodeDataRef ->----------------+| |
+-----+--------------+ | |
+-----+--------------+ | |
|node2| NodeDataRef ->-----------------+ |
+-----+--------------+ |
|
+-----+--------------+ |
|root | RootDataRef ->-------------------+
+-----+--------------+
- いくつかの
Nodeクラスがあり、それぞれが「」の同じインスタンスへの「参照」(think )をNode保持します(クラス、構造、何でも-動的に割り当てられます)。NodeDataRefshared_ptrData - 同じ""への参照(今回はthink )を保持する"
Root"または"master"ノード/クラスもあります。RootDataRefweak_ptrData - すべて
Nodeのsが破棄されると、dataも破棄され、 /RootDataRefに設定されます。つまり、のように振る舞い、0NULLNodeDataRefshared_ptr<Data>RootDataRefweak_ptr<Data> - ただし、ルートノードは、アクティブながまだ存在する場合でも、データを強制的に破棄する可能性があります
NodeDataRef。この状況NodeDataRefでは、データを指していたすべてのsが/に設定され、NULLまた/0に設定RootDataRefされます。0NULL
つまりweak_ptr<Data>、リンクされているすべてのを強制的に破壊することができますshared_ptr<Data>。
- このパターン/スマートポインタタイプには名前がありますか?
- BoostまたはQt4を使用してこれをすばやく実装するにはどうすればよいですか?(「迅速に」とは、参照のリストを維持するためのクラスを作成しないことを意味します)