मैं एक नहीं बल्कि बुनियादी सी ++ सवाल मिल गया है, कि नीचे एक की तरह उन मापदंडों से एक समारोह है कि कुछ इनपुट पैरामीटर लेता है और बनाता है एक std::string
पर विचार करें:सी ++ लौटने अस्थायी वस्तुओं भ्रम
std::string constructString(int some_parameter) {
std::stringstream ss;
// Construct a string (arbitrarily complex)
ss << "Some parameter is " << some_parameter << " right now";
return ss.str(); //Am I not returning a temporary object here?
}
मुझे लगता है कि समझ में फ़ंक्शन लौटने पर स्ट्रिंगस्ट्रीम-ऑब्जेक्ट गुंजाइश से बाहर हो जाएगा, लेकिन क्या यह निर्मित स्ट्रिंग को भी अमान्य नहीं करता है?
क्या होगा यदि मैंने वापसी प्रकार को const char *
पर बदल दिया और इसके बजाय ss.str().c_str()
लौटा दिया?
उपरोक्त की तरह कोड काम करता प्रतीत होता है, लेकिन मुझे संदेह है कि ऐसा इसलिए है क्योंकि 'अस्थायी' ऑब्जेक्ट वाली मेमोरी अभी तक किसी अन्य चीज़ के साथ ओवरराइट नहीं हुई है जब मैं इसका उपयोग करता हूं?
मुझे स्वीकार करना है, मैं सामान्य रूप से ऐसी परिस्थितियों में उलझन में हूं, अगर कोई इस पूरे "अस्थायी वस्तुओं" को समझा सकता है (या बस मुझे सही दिशा में इंगित करता है) तो मैं इसकी सराहना करता हूं।
अग्रिम
इस प्रतिलिपि को फ़ंक्शन कॉलिंग निर्माण स्ट्रिंग द्वारा उठाए जाने के बाद बुलाया जाएगा विनाशक? चूंकि यह अस्थायी वस्तु है, मुझे लगता है कि इसे पॉइंटर को स्टैक पर वापसी मूल्य के रूप में रखा जाता है। लौटने के बाद क्या होता है? यदि कोई नया ऑब्जेक्ट स्वामी नहीं है तो क्या यह नष्ट हो गया है? कैसे संकलक जानता है कि ऑब्जेक्ट को नष्ट करना है या वापस लौटने के बाद नहीं? –