Ich bin nicht sehr daran gewöhnt weak_ptr
und stehe vor einer ziemlich verwirrenden Situation. Ich verwende Intel XE 2019 Composer Update 5 ( Paket 2019.5.281 ) in Kombination mit Visual Studio 2019 ver. 16.2.5 . Ich kompiliere in 64-Bit. Ich benutze das Standard C ++ 17 .
Hier ist der Code für meine Spike-Lösung:
#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;
}
Die Ausgabe, die ich erwartet hatte, ist:
*sp = 42
*sp = 42, *wp = 42
*sp = 42
... aber hier ist was ich erhalten habe:
*sp = 42
*sp = 42, *wp = 42
*sp = -572662307
Was passiert gerade? Ist es normal, dass das shared_ptr
geändert / ungültig gemacht wird, wenn das / ein zugeordnetes weak_ptr
zurückgesetzt wird? Ich bin etwas verwirrt über die Ergebnisse, die ich erzielt habe. Um die Wahrheit zu sagen, ich habe dieses Ergebnis nicht erwartet ...
BEARBEITEN 1
Während der Fehler in der 64-Bit- Konfiguration auftritt , tritt er nicht in der 32-Bit - Konfiguration auf . In dieser späteren Konfiguration ist das Ergebnis das, was erwartet wird.
BEARBEITEN 2
Der Fehler tritt nur beim Debuggen auf . Wenn ich Release einbaue , erhalte ich das erwartete Ergebnis.
-572662307 = 0xDDDDDDDD
Dies ist die Methode von msvc, um den freigegebenen Heapspeicher anzuzeigen