boost::weak_ptr
의 경우 operator<
이 정의되어 연관 컨테이너에 사용할 수 있습니다.만료 후 boost :: weak_ptr의 정렬 순서는 무엇입니까?
제 질문은 : weak_ptr
개체 중 일부가 0의 참조로 변경되는 경우에도 안정적인 정렬 순서입니까? std::set
과 같은 컨테이너로 엉망이되지 않습니까?
예 :
using namespace boost;
shared_ptr<A> sptrA1(new A);
weak_ptr<A> wptrA1 = sptrA1;
weak_ptr<A> wptrA2;
{ // begin Scope 1
shared_ptr<A> sptrA2(new A);
wptrA2 = sptrA2;
assert(wptrA1 < wptrA2); // assert #1
}
assert(wptrA1 < wptrA2); // assert #2
- 항상 어설 션 # 1에 해당하는 경우 성립 # 2를 주장 할 것인가?
wptrA2
은 범위 1 이전과 이후의 동일한 상태에 있습니까?
흥미 롭습니다. 나는 http://www.boost.org/doc/libs/1_43_0/libs/smart_ptr/weak_ptr.htm에있는 use_count의 문서에 혼란 스러웠다. 그것은 "반환 값 : * 이것이 비어있는 경우 0입니다."그러나 대답에 따르면 역 (*가 0을 반환하면 비어 있음)이 사실이 아니라고하지? (empty가 weak_ptr을 구성하는 기본 값에서 얻은 상태로 정의 된 경우) –
여기서'use_count'가 수행하는 작업에 대해 언급하지 않았습니다. :) 즉, 내부 참조 계산 구조는 강력한 참조 용으로 만 두 개를 유지합니다 (그것이 0이 될 때, 지적 된 객체는 파괴된다), 강한 참조와 약한 참조를 모두 포함한다. (그것이 0 일 때 참조 계산 구조는 파괴된다.) 'use_count' 함수는 strong-count-only 함수를보고 있을지도 모릅니다. 그러나 나는 전혀 조사하지 않았으므로 직접 확인하십시오. :) – bdonlan