제가 이해하기에, 은 할당 해제되었을 수있는 std::shared_ptr
에 의해 참조되는 메모리를 참조하는 안전한 방법으로 사용됩니다. std::unique_ptr
과 함께 사용할 수 있습니까?weak_ptr이 (가) unique_ptr과 함께 작동합니까?
답변
.
귀하는 잘못 알고 있습니다. std::weak_ptr
허용자는 오브젝트를 공유하지 않고 std::shared_ptr
에 의해 소유권이 유지되는 오브젝트에 액세스 할 수 있습니다. 이제 std::weak_ptr
이 무엇인지 이해하면 std::unique_ptr
에 관한 질문은 이해가되지 않습니다.
아니요.
std::shared_ptr
을 사용하고 std::weak_ptr
을 일시적으로 잠글 수 있도록 문서화해야합니다. weak_ptr
사용할 수
불행히도 다행히도? 이중 소유권은 장기 고유의 소유권 의미를 유지하기 위해 잠긴'std :: weak_ptr'를 절대 잡지 않기 위해 외부 코드에 의존해야하기 때문에'unique_ptr'의 한 특징은'unique_ptr'의 특징입니다. – curiousguy
@curiousguy "불행하게도". – Quentin
공유 소유 스마트 ptr에 고유 한 소유권이있는 스마트 ptr의 고유 한 구. 및 의미 론적 우위가'release' 메소드입니다 (예외는 아니며 보장 된 작동). unique_ptr_except_locked_weak_ptr을 가질 수 있고, 잠금이 "짧다"고 할 수 있지만, 정의에 의해 (약한 참조의) 잠금은 어떤 것보다 오래 지속되고 마지막 소유자가 될 수 있으며, release()는 보장 될 수 없다. – curiousguy
번호
유일한 생성자 중 하나 shared_ptr
또는 다른 weak_ptr
을 하나입니다. 나는 그것이 표준 : : weak_ptr를 할당이 해제되었을 수 shared_ptrs에 의해 참조 메모리를 참조하는 안전한 방법으로 사용됩니다 알고있는 것처럼
std::unique_ptr
의 옵서버 역할을하는 동일한 포인터가 있지만 std::weak_ptr
과 같은 방식으로 안전성을 제공하지는 않습니다.
해당 포인터는 원시 포인터입니다. 그들은 고유 한 소유자보다 오래 살지 않는 한 안전하게 사용할 수 있습니다.
원시 포인터 소유자의 수명이 끝났는지 알아야 할 경우, 아니요, 방법이 없으며 std::unique_ptr
이라는 목표가 아닙니다.
[ "weak_ptr을 unique_ptr에서 생성 할 수없는 이유는 무엇입니까?"] (http://stackoverflow.com/questions/29059343/why-cant-a-weak-ptr-be) -s-unique-ptr) – WhozCraig
아니요, 이치에 맞지 않습니다. 'std :: weak_ptr'은'std :: unique_ptr'가 가지고 있지 않은 * 공유 소유권 *을 필요로합니다. – Galik
unique_ptr은 * unique *입니다. 이것은 그 인생의 목적입니다. –