2017-03-09 8 views
2

제가 이해하기에, 은 할당 해제되었을 수있는 std::shared_ptr에 의해 참조되는 메모리를 참조하는 안전한 방법으로 사용됩니다. std::unique_ptr과 함께 사용할 수 있습니까?weak_ptr이 (가) unique_ptr과 함께 작동합니까?

+3

[ "weak_ptr을 unique_ptr에서 생성 할 수없는 이유는 무엇입니까?"] (http://stackoverflow.com/questions/29059343/why-cant-a-weak-ptr-be) -s-unique-ptr) – WhozCraig

+4

아니요, 이치에 맞지 않습니다. 'std :: weak_ptr'은'std :: unique_ptr'가 가지고 있지 않은 * 공유 소유권 *을 필요로합니다. – Galik

+2

unique_ptr은 * unique *입니다. 이것은 그 인생의 목적입니다. –

답변

5

.

귀하는 잘못 알고 있습니다. std::weak_ptr 허용자는 오브젝트를 공유하지 않고 std::shared_ptr에 의해 소유권이 유지되는 오브젝트에 액세스 할 수 있습니다. 이제 std::weak_ptr이 무엇인지 이해하면 std::unique_ptr에 관한 질문은 이해가되지 않습니다.

1

아니요.

std::shared_ptr을 사용하고 std::weak_ptr을 일시적으로 잠글 수 있도록 문서화해야합니다. weak_ptr 사용할 수

+0

불행히도 다행히도? 이중 소유권은 장기 고유의 소유권 의미를 유지하기 위해 잠긴'std :: weak_ptr'를 절대 잡지 않기 위해 외부 코드에 의존해야하기 때문에'unique_ptr'의 한 특징은'unique_ptr'의 특징입니다. – curiousguy

+0

@curiousguy "불행하게도". – Quentin

+0

공유 소유 스마트 ptr에 고유 한 소유권이있는 스마트 ptr의 고유 한 구. 및 의미 론적 우위가'release' 메소드입니다 (예외는 아니며 보장 된 작동). unique_ptr_except_locked_weak_ptr을 가질 수 있고, 잠금이 "짧다"고 할 수 있지만, 정의에 의해 (약한 참조의) 잠금은 어떤 것보다 오래 지속되고 마지막 소유자가 될 수 있으며, release()는 보장 될 수 없다. – curiousguy

0

번호

유일한 생성자 중 하나 shared_ptr 또는 다른 weak_ptr을 하나입니다. 나는 그것이 표준 : : weak_ptr를 할당이 해제되었을 수 shared_ptrs에 의해 참조 메모리를 참조하는 안전한 방법으로 사용됩니다 알고있는 것처럼

http://en.cppreference.com/w/cpp/memory/weak_ptr/weak_ptr

2

std::unique_ptr의 옵서버 역할을하는 동일한 포인터가 있지만 std::weak_ptr과 같은 방식으로 안전성을 제공하지는 않습니다.

해당 포인터는 원시 포인터입니다. 그들은 고유 한 소유자보다 오래 살지 않는 한 안전하게 사용할 수 있습니다.

원시 포인터 소유자의 수명이 끝났는지 알아야 할 경우, 아니요, 방법이 없으며 std::unique_ptr이라는 목표가 아닙니다.