के बीच अंतर मैं सी ++ के संदर्भ का अध्ययन कर रहा हूं, और अब मैं परिवर्तनीय नाम और संदर्भ के बीच अंतर से काफी उलझन में हूं। परीक्षण कोड नीचे है:परिवर्तनीय संदर्भ और नाम
class TestClass{
private:
int num;
public:
TestClass(int n):num(n){
cout<<this<<" : init of : " <<this->num<<endl;
}
TestClass(const TestClass& t):num(t.num){
cout<<this<<" : copyInit of : " <<this->num<<endl;
}
};
int main(int argc, const char * argv[]){
TestClass t = *(new TestClass(55)); //just to test copy initialization
const TestClass t2 = TestClass(100); //option1
const TestClass &t2 = TestClass(100); //option2
}
तो अब मेरे पास ऑब्जेक्ट बनाने में दो विकल्प हैं, जो एक-दूसरे के साथ अनन्य हैं।
मेरी समझ में, यदि मैं विकल्प 2 का उपयोग करता हूं, तो संकलक स्टैक मेमोरी में एक अस्थायी वस्तु बनाता है और संदर्भ मान को t2 पर देता है।
यदि यह सही है, तो मैं विकल्प 1 को verbalize या समझा सकता हूं? ऐसा लगता है कि वही ऑब्जेक्ट स्टैक मेमोरी में बनाया गया है और कंप्यूटर उस ऑब्जेक्ट पर 't2' नाम देता है, लेकिन मुझे स्पष्ट रूप से समझ में नहीं आता कि यह विकल्प 1विकल्प 2 के साथ अलग है क्योंकि चर और संदर्भ का नाम है कुछ उलझन में।
इसके अलावा, वैकल्पिक रूप से स्विचिंग विकल्प, मैं देख सकता था कि ऑब्जेक्ट प्रत्येक मामले में विभिन्न मेमोरी स्थानों में बनाए जाते हैं। (जैसे OPTION1 की वस्तु 0x7fff5fbff828 में बनाया गया था, और कहा कि या OPTION2 0x7fff5fbff820 में था)
आप कृपया समझा सकते हैं
1. एक चर नाम (OPTION1) और संदर्भ (OPTION2) के बीच अंतर क्या ।
2. कैसे चीजें विकल्प 1 में अलग तरह से काम 2.
3. क्यों वस्तुओं या तो मामलों में अलग स्मृति स्थान में बनाए जाते हैं और।
अग्रिम में, आपकी मदद के लिए धन्यवाद!
मैं इस सवाल पर एक जवाब का प्रयास होगा, लेकिन अपने 3 प्रश्न मुझे confuses हैं के बावजूद ... करता है कोड संकलित? –
@LewsTherin यदि आप पहले विकल्प का नाम बदलते हैं, तो यह संकलित करता है। –
ध्यान दें कि 'टेस्टक्लास टी = * (नया टेस्टक्लास (55)) में;' अब आप आवंटित स्मृति को हटा नहीं सकते हैं। –