मैं उपयोग करने के लिए बहुत अभ्यस्त नहीं हूं weak_ptr
और मैं काफी भ्रामक स्थिति का सामना कर रहा हूं। मैं इंटेल XE 2019 कम्पोजर अपडेट 5 ( पैकेज 2019.5.281 ) का उपयोग विजुअल स्टूडियो 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
रीसेट किया जाता है तो क्या उसे संशोधित / अमान्य किया जाना सामान्य है? मैं प्राप्त परिणामों के बारे में थोड़ा भ्रमित हूं। सच कहूं तो मुझे इस परिणाम की उम्मीद नहीं थी ...
EDIT 1
जबकि बग 64-बिट कॉन्फ़िगरेशन में होता है , यह 32-बिट में नहीं होता है । इस बाद के विन्यास में, परिणाम वही है जो अपेक्षित है।
EDIT 2
बग केवल डीबग में होता है । जब मैं रिलीज में निर्माण करता हूं , तो मुझे अपेक्षित परिणाम मिलता है।
-572662307 = 0xDDDDDDDD
, जो कि फ्रीक हीप मेमोरी को इंगित करने का msvc का तरीका है