문제

shared_ptr 내부를 알고있는 컬렉션이 있습니까? 내부 약한 포인터를 복사하는 데 유리한 저장된 shared_ptr 요소를 정기적으로 복사하지 않습니까?

이는 암시 적으로 생성자/소멸자 호출이 수행되지 않으며 Shared_PTRS의 참조 카운터의 조작이 없음을 의미합니다.

도움이 되었습니까?

해결책

그것은 shared_ptr 내부를 알고 있습니다.

그것은 당신의 질문에 바로 답해야합니다. 내부를 인식하기 위해, 그러한 컬렉션은 거의 확실히 Boost의 스마트 포인터 라이브러리의 일부가되어야합니다. 불행히도, 그런 것은 없습니다.

이것은 실제로 똑똑한 포인터의 단점입니다. 내부적으로 수행 된 사본 수를 제한하는 데이터 구조를 사용하는 것이 좋습니다. 벡터의 재 할당은 고통 스러울 것입니다. 아마도 청크 기반 할당이있는 Deque가 유용 할 것입니다. 벡터 구현은 기하 급수적으로 증가하는 청크에서 새로운 메모리를 얻는 경향이 있음을 명심하십시오. 그래서 그들은 10 가지 요소마다 재 할당하지 않습니다. 대신 128 개의 요소로 시작한 다음 벡터가 256을 보유한 다음 필요한 것을 두 배로 늘릴 때마다 최대 512, 1024 등을 이동합니다.

이에 따라 부스트의 PTR_VECTOR 또는 내부 복사를 방지하기에 충분한 공간으로 데이터 구조를 Prealloceed합니다.

다른 팁

이론적으로 C ++ 0X가 채택 된 후에는 컨테이너가 적절한 경우 이동 의미를 사용하도록 수정됩니다. 그 시점에서 shared_ptr 또한 불필요한 참조 수 조정을 최소화하기 위해 이동 생성자를 갖도록 수정할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top