यह माध्यम से एक series of SO questions आज स्पष्ट हो गया है कि मैं केवल संकेत दिए गए, संदर्भ, और मूल्यों की वास्तविक प्रकृति के एक गरीब समझ है।संदर्भ बनाम पॉइंटर्स को समझना। यह क्यों काम करता है?
निम्नलिखित कोड पर विचार करें:
int* p = new int(3);
int& r = *p;
cout << " p = " << p << "\t*p = " << *p << endl;
cout << "&r = " << &r << "\t r = " << r << endl;
delete p;
cout << "&r = " << &r << "\t r = " << r << endl;
int v = 4;
r = v;
cout << "&r = " << &r << "\t r = " << r << endl;
इस के लिए उत्पादन
p = 0x1001000b0 *p = 3
&r = 0x1001000b0 r = 3
&r = 0x1001000b0 r = 3
&r = 0x1001000b0 r = 4
है बात मुझे समझ नहीं आता है क्यों दूसरी बार मैं संदर्भ के मूल्य प्रिंट मैं डॉन एक त्रुटि नहीं है। संदर्भ के मान से संबंधित सूचक पहले से ही हटा दिया गया है। मेरे previous question से, मैंने लगभग खुद को आश्वस्त किया था कि r = x
जैसे किसी भी कथन मान के स्थान पर x
की एक प्रति बनाता है। हालांकि, अगर यह मामला था तो p
और &r
अलग-अलग पते होंगे, है ना? अगर मैंने पहले ही 0x100100b0 पर डिलीट बुलाया है, तो मैं इसका उपयोग कैसे कर सकता हूं?
सही या गलत: एक संदर्भ एक पते पर मूल्य के उपनाम के समान ही है।
सही या गलत: के रूप में संदर्भित मूल्य रहता है आप एक ही पते पर एक सूचक को हटाते हैं, (जैसा कि मैंने ऊपर करते हैं), तो कोई अपरिभाषित व्यवहार हो जाएगा, और कोई भी कभी भी रूप में लंबे समय के रूप में उस पते के ऊपर लिख देगा संदर्भ मौजूद है।
अपरिभाषित व्यवहार के बारे में बात यह है कि इसे पूरी तरह से ठीक काम करने की अनुमति है। :) –
सच, झूठा, और क्या @ करल ने कहा। यह अनिर्धारित व्यवहार है जो इस बार दुर्घटनाग्रस्त नहीं हुआ। – aschepler
@ आप लोग महान हैं! तब मुझे लगता है कि मैं अंत में समझता हूं। – JnBrymn