C++ 11에는 boost :: intrusive_ptr과 동일한 기능이 있습니까?
호
이 std::shared_ptr
수단 std::make_shared
인 있는가 거의 기준 카운트는 오브젝트 자체에 메모리에 인접하여 저장 될 수 있기 때문에, 관입 스마트 포인터만큼 효율적 (아래 참고 참조) 참조 및 캐시 사용의 지역성을 향상시킵니다. 또한 shared_ptr
이 소유 한 개체에 대한 기본 제공 포인터 만있을 때 std::shared_ptr
을 검색 할 수 있지만 다른 스마트 포인터 유형을 사용하여 개체를 관리 할 수는 없습니다. std::enable_shared_from_this
을 제공합니다.
shared_ptr
은 개체 관리를 전적으로 담당해야합니다. 다른 스마트 포인터 유형은 카운트가 동기화되지 않고 shared_ptr
의 불변 값을 나눌 수있게하는 "약한"참조 횟수가 아닌 "강력한"조회 수만 관리 할 수 있습니다.
참고 : make_shared
사용은 shared_ptr
가 침입 포인터로 거의 효율적이 될 수 있습니다. make_shared
이 사용될 때 객체 및 참조 카운팅 정보가 단일 메모리 덩어리에 할당 될 수 있지만 간섭 포인터에 해당하지 않는 두 개의 참조 카운트 ("strong"및 "weak"카운트의 경우)가 여전히 존재합니다 그들은 weak_ptr
을 지원하지 않으므로 또한 shared_ptr
개체 자체는 항상 두 개의 포인터 (shared_ptr::get()
에 의해 반환되는 포인터와 참조 카운트를 포함하고 소유 된 개체의 동적 유형을 아는 "제어 블록"에 대한 포인터)을 저장해야하므로 더 큰 공간을 차지합니다 침입 포인터보다.
사용자 정의 삭제자를 사용하여'unique_ptr' 주위의 래퍼를 사용하여 스레드 안전 (또는 비 참조) 참조 수를 만들 수 있도록'intrusive_ptr' 구현을 만들 수 있습니다. 주위를 돌아 다니기가 쉽지 않습니다 (이동 또는 수동으로 심판 수를 조작해야 함). 가능합니다. – Chad