Saya tidak terlalu terbiasa menggunakan weak_ptr
dan saya menghadapi situasi yang cukup membingungkan. Saya menggunakan Intel XE 2019 Composer pembaruan 5 ( paket 2019.5.281 ) dalam kombinasi dengan Visual Studio 2019 ver. 16.2.5 . Saya kompilasi dalam 64-bit. Saya menggunakan standar C ++ 17 .
Berikut adalah kode untuk solusi spike saya:
#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;
}
Output yang saya harapkan adalah:
*sp = 42
*sp = 42, *wp = 42
*sp = 42
... tapi inilah yang saya dapatkan:
*sp = 42
*sp = 42, *wp = 42
*sp = -572662307
Apa yang sedang terjadi? Apakah normal untuk shared_ptr
dimodifikasi / tidak valid ketika / yang terkait weak_ptr
direset? Saya sedikit bingung dengan hasil yang saya peroleh. Sejujurnya saya tidak mengharapkan hasil ini ...
EDIT 1
Sementara bug terjadi dalam konfigurasi 64-bit , itu tidak dalam 32-bit . Dalam konfigurasi nanti ini, hasilnya adalah apa yang diharapkan.
EDIT 2
Bug hanya terjadi di Debug . Ketika saya membuat Rilis , saya mendapatkan hasil yang diharapkan.
-572662307 = 0xDDDDDDDD
yang merupakan cara msvc untuk menunjukkan memori tumpukan yang dibebaskan