Kullanmaya pek alışkın weak_ptr
değilim ve oldukça kafa karıştırıcı bir durumla karşı karşıyayım. Ben kullanıyorum Intel XE 2019 Besteci güncelleme 5 ( paket 2019.5.281 ile combinaison olarak) ver Visual Studio 2019. 16.2.5 . 64 bit derliyorum. Standart C ++ 17 kullanıyorum .
İşte benim spike çözümü için kod:
#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;
}
Beklediğim çıktı:
*sp = 42
*sp = 42, *wp = 42
*sp = 42
... ama elde ettiğim şey:
*sp = 42
*sp = 42, *wp = 42
*sp = -572662307
Ne oluyor? shared_ptr
/ A ilişkilendirildiğinde weak_ptr
sıfırlandığında değiştirilmesi / geçersiz kılınması normal midir? Elde ettiğim sonuçlar hakkında biraz kafam karıştı. Doğruyu söylemek gerekirse bu sonucu beklemiyordum ...
DÜZENLEME 1
Hata 64 bit yapılandırmada ortaya çıkarken, 32 bit değil . Bu sonraki yapılandırmada, sonuç beklenen sonuçtur.
DÜZENLEME 2
Hata yalnızca Hata Ayıklama'da oluşur . Ben oluştururken Release , beklediğim sonuç almak.
-572662307 = 0xDDDDDDDD
, msvc'nin serbest yığın hafızasını gösterme şekli