성능과 메모리 사용을 유지하면서 동일한 요소가 다른 침투성 컨테이너에 나타날 수있는 가능성을 이해하지 못했습니다. boost::intrusive
설명서에 명시되어 있습니다.boost :: intrusive containers에서 하나의 요소에 대한 혼란
STL과 향상의 차이점 :: 침입 용기를 밑줄 , 문서는 말한다 :가 침입 컨테이너가 통과 객체의 복사본을 저장하지만, 저장 개체를 스스로하지 않습니다
문서
는 말한다. 을 컨테이너에 삽입하는 데 필요한 추가 데이터는 개체 자체에서 제공해야합니다. 예를 들어, 연결리스트를 구현하는 침입 용기에MyClass
를 삽입,MyClass
는 필요한 다음 및 이전 포인터를 포함해야합니다class MyClass { MyClass *next; MyClass *previous; // ... };
비 간섭 컨테이너가 몇 가지 제한 사항이 있습니다 :
개체는 하나의 컨테이너에만 속할 수 있습니다. 두 컨테이너간에 개체를 공유하려면 이러한 개체의 복사본을 여러 개 저장해야하거나 포인터 컨테이너 (
std::list<Object*>
)를 사용해야합니다.
의미가 있습니다. 요소는 두 개가 될 수 없습니다. std::list
괜찮아. 그러나 유형 MyClass
의 한 인스턴스는 두 개의 다른 boost::intrusive::list
에 삽입 될 수 있습니다. 예를 들어 이러한 요소에는 다음 요소에 대한 포인터와 이전 요소에 대한 포인터가 하나만있을 수 있습니다. 잘못된 것이 아니라면 하나의 컨테이너를 수정하면 다른 컨테이너도 수정할 수 있다고 가정 할 때만 작동합니다.
나는 이것에 대해 생각해 본 이래로 꽤 오랜 시간이 걸렸지 만, [std :: list.splice'] (http : //en.cppreference.co.kr/w/cpp/container/list/splice) 관입 목록을 사용하지 마십시오 – David
처음 세 번이 질문을 완전히 오독했습니다. –