আমি ব্যবহারে weak_ptr
খুব অভ্যস্ত নই এবং আমি বেশ বিভ্রান্তিকর পরিস্থিতির মুখোমুখি হয়েছি। আমি ভিজুয়াল স্টুডিও 2019 ভারের সংমিশ্রণে ইন্টেল এক্সই 2019 এর সুরকার আপডেট 5 ( প্যাকেজ 2019.5.281 ) ব্যবহার করছি । 16.2.5 । আমি 64-বিট মধ্যে সংকলন। আমি স্ট্যান্ডার্ড সি ++ 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
ত্রুটিটি যখন -৪-বিট কনফিগারেশনে ঘটে তবে তা 32-বিটে হয় না । এই পরবর্তী কনফিগারেশনে, ফলাফলটি প্রত্যাশিত।
সম্পাদনা 2
বাগটি কেবলমাত্র ডিবাগে ঘটে । আমি যখন রিলিজে তৈরি করি তখন আমি প্রত্যাশিত ফলাফলটি পাই।
-572662307 = 0xDDDDDDDD
ডিবাগকে সহায়তা করে , যা এমএসভিসি'র ফ্রিড হিপ মেমরির ইঙ্গিত করার উপায়