1
표준 말한다 :표준 : weak_ptr.lock 멀티 스레드 C++
shared_ptr<T> lock() const noexcept;
결과 :
expired() ? shared_ptr<T>() : shared_ptr<T>(*this).
하지만 그 사이에 거짓 (개체가 여전히 존재)와 건축을 반환 만료 shared_ptr 다른 스레드가 마지막 강력한 참조를 제거 할 수 있으므로 예기치 않은 예외가 발생합니까? 이걸 어떻게 막을 수 있니?
또는 무엇인가 놓칠 수 있습니까?
"lock()의 동작은이 코드와 같지만 다른 스레드와 관련하여 원자 적입니다." 그렇다면 표준 텍스트는 아무 것도 말하지 않으므로 결함이 있습니다. –
@ R.MartinhoFernandes : 표준은 구현을 정의하지 않고 결과의 * 값 *을 정의합니다. 그래서 표준 텍스트는 괜찮습니다. –
@ R.MartinhoFernandes : 두 번째 생각에, 나는 [boost] (http://www.boost.org/doc/libs/1_53_0/libs/smart_ptr/weak_ptr.)에서'weak_ptr :: lock()'의 원 자성을 생각해 낸다. htm),하지만 지금은 libstd 구현에 적용되는지 모르겠습니다. [이] (http://gcc.gnu.org/onlinedocs/libstdc++/manual/shared_ptr.html) 및 아마도 [this] (http://msdn.microsoft.com/en-us/library/c9ceah3b%28v= vs.100 % 29.aspx)는 제안하는 것처럼 보이지만 표준에서 확인을 찾을 수 없습니다 ... – rodrigo