boost::intrusive
ドキュメントに記載されているパフォーマンスとメモリ使用量の保証を維持しながら、同じ要素が異なる侵入型コンテナーに表示される可能性があることをよく理解していません。
ドキュメントには次のように記載されています。
侵入型コンテナは、渡されたオブジェクトのコピーを保存しませんが、オブジェクト自体を保存します。オブジェクトをコンテナーに挿入するために必要な追加データは、オブジェクト自体によって提供される必要があります。たとえば
MyClass
、リンクされたリストを実装する侵入型コンテナーに挿入するにMyClass
は、必要な次および前のポインターを含める必要があります。
class MyClass
{
MyClass *next;
MyClass *previous;
// ...
};
STL と boost::intrusive コンテナーの違いに下線を引くと、ドキュメントには次のようにも記載されています。
非侵入型コンテナにはいくつかの制限があります。
オブジェクトは 1 つのコンテナーにのみ属することができます。2 つのコンテナー間でオブジェクトを共有する場合は、それらのオブジェクトの複数のコピーを格納するか、ポインターのコンテナーを使用する必要があります
std::list<Object*>
。
理にかなっています。要素を 2 つstd::list
の s にすることはできません。わかった。MyClass
しかし、タイプの 1 つのインスタンスを2 つの異なる に挿入するにはどうすればよいでしょうかboost::intrusive::list
。たとえば、そのような要素は次の要素へのポインターを 1 つしか持てず、前の要素へのポインターを 1 つしか持つことができないとします。私が間違っていなければ、これは、あるコンテナーを変更すると他のコンテナーも変更される可能性があると想定している場合にのみ機能し、その逆も同様です。