나는 사용에 익숙하지 않으며 매우 weak_ptr
혼란스러운 상황에 직면하고 있습니다. 내가 사용하고 인텔 XE 2019 작곡가 업데이트 5 ( 패키지 2019.5.281을 함께 combinaison에) 버전의 Visual Studio 2019. 16.2.5 . 64 비트로 컴파일합니다. 표준 C ++ 17을 사용합니다 .
내 스파이크 솔루션의 코드는 다음과 같습니다.
#include <memory>
#include <iostream>
using namespace std;
int main( int argc, char* argv[] )
{
shared_ptr<int> sp = make_shared<int>( 42 );
cout << "*sp = " << *sp << endl;
weak_ptr<int> wp = sp;
cout << "*sp = " << *sp << ", *wp = " << *wp.lock() << endl;
wp.reset();
cout << "*sp = " << *sp << endl;
return 0;
}
내가 기대했던 결과는 다음과 같습니다.
*sp = 42
*sp = 42, *wp = 42
*sp = 42
...하지만 내가 얻은 것은 다음과 같습니다.
*sp = 42
*sp = 42, *wp = 42
*sp = -572662307
무슨 일이야? shared_ptr
관련 weak_ptr
이 재설정 될 때이 수정 / 무효화되는 것이 정상 입니까? 내가 얻은 결과에 대해 약간 혼란 스럽습니다. 진실을 말하면 나는이 결과를 기대하지 않았습니다 ...
편집 1
버그는 64 비트 구성 에서 발생하지만 32 비트 에는 없습니다 . 이 나중 구성에서는 결과가 예상됩니다.
편집 2
버그는 디버그 에서만 발생합니다 . Release 에서 빌드 하면 예상 결과가 나타납니다.
-572662307 = 0xDDDDDDDD
힙 메모리를 나타내는 msvc의 방식 인 디버그에 도움이되는 경우