공유 소유권 : 및 채택 된 표준은 거의 자신과 동일 부스트 대응 . 자원을 공유해야하고 마지막으로 생존 할 자원을 모를 때 사용하십시오. 주기에 영향을 미치지 않고 수명에 영향을 미치지 않고 공유 리소스를 관찰하는 데 사용 합니다. 사이클 은 일반적으로 발생하지 않아야합니다. 두 리소스는 서로를 소유 할 수 없습니다.
shared_ptr
weak_ptr
weak_ptr
shared_ptr
Boost는 추가로 오퍼를 제공하는데 shared_array
, 이는에 대한 적절한 대안 일 수 shared_ptr<std::vector<T> const>
있습니다.
다음으로, intrusive_ptr
자원이 참조 계산 관리를 이미 제공하고 RAII 원칙에 채택하려는 경우 가벼운 솔루션 인 Boost 제공합니다 . 이것은 표준에 의해 채택되지 않았습니다.
고유 소유권 :
Boost에는 또한 scoped_ptr
복사 할 수 없으며 삭제자를 지정할 수없는을 가지고 있습니다. std::unique_ptr
이다 boost::scoped_ptr
스테로이드에와 있어야합니다 스마트 포인터를 필요로 할 때 기본 선택 . 그것은 당신이 그것의 템플릿 인수로 삭제기를 지정할 수 있으며 달리 움직일 수boost::scoped_ptr
있습니다. 복사 가능한 유형이 필요한 작업을 사용하지 않는 한 STL 컨테이너에서도 완벽하게 사용할 수 있습니다.
Boost는 배열 버전 :을 가지고 있음을 주목하십시오.이 scoped_array
표준 은 ( r로) 포인터 대신 포인터 std::unique_ptr<T[]>
를 사용할 부분 전문화를 요구함으로써 통합되었습니다 . 및 대신 제공합니다 .delete[]
delete
default_delete
std::unique_ptr<T[]>
operator[]
operator*
operator->
주 std::auto_ptr
표준에 아직도있다, 그러나이되어 사용되지 .
§D.10 [depr.auto.ptr]
클래스 템플릿 auto_ptr
은 더 이상 사용되지 않습니다. [ 참고 : 클래스 템플릿 unique_ptr
(20.7.1)은 더 나은 솔루션을 제공합니다. — 끝 노트 ]
소유권 없음 : 리소스에
대한 비 소유 참조 에 대해 벙어리 포인터 (원시 포인터) 또는 참조를 사용 하고 리소스가 참조 객체 / 범위 보다 오래 지속 된다는 것을 알고있는 경우 . nullable 또는 resettability가 필요할 때 참조를 선호하고 raw 포인터를 사용하십시오.
당신은 자원에 비 소유 참조를 원하는,하지만 당신은 리소스 개체를 오래 살 것입니다 경우 참조는, A의 자원을 팩 것을 모르는 경우 shared_ptr
와 사용하십시오 weak_ptr
- 부모가 있는지 테스트 할 수 shared_ptr
와 살아 lock
있는 것, shared_ptr
자원이 여전히 존재하는 경우 널이 아닌를 리턴하십시오 . 리소스가 죽었는지 테스트하려면을 사용하십시오 expired
. 둘은 비슷하게 들릴 수 있지만 동시 실행의 경우에는 expired
단일 문에 대한 반환 값만 보장하므로 매우 다릅니다 . 겉보기에 순진한 시험
if(!wptr.expired())
something_assuming_the_resource_is_still_alive();
잠재적 인 경쟁 조건입니다.