क्या C ++ एक अस्थायी चर के जीवनकाल के लिए एक गारंटी प्रदान करता है जो एक फ़ंक्शन कॉल के भीतर बनाया गया है लेकिन एक पैरामीटर के रूप में उपयोग नहीं किया जाता है? यहाँ एक उदाहरण वर्ग है:
class StringBuffer
{
public:
StringBuffer(std::string & str) : m_str(str)
{
m_buffer.push_back(0);
}
~StringBuffer()
{
m_str = &m_buffer[0];
}
char * Size(int maxlength)
{
m_buffer.resize(maxlength + 1, 0);
return &m_buffer[0];
}
private:
std::string & m_str;
std::vector<char> m_buffer;
};
और यहां बताया गया है कि आप इसका उपयोग कैसे करेंगे:
// this is from a crusty old API that can't be changed
void GetString(char * str, int maxlength);
std::string mystring;
GetString(StringBuffer(mystring).Size(MAXLEN), MAXLEN);
अस्थायी StringBuffer ऑब्जेक्ट के लिए विनाशकारी कब कहा जाएगा? क्या यह:
- GetString पर कॉल करने से पहले?
- गेटस्ट्रिंग रिटर्न के बाद?
- संकलक निर्भर?
मुझे पता है कि C ++ गारंटी देता है कि एक स्थानीय अस्थायी वैरिएबल तब तक मान्य होगा जब तक कि उसका कोई सन्दर्भ न हो - क्या यह माता-पिता की वस्तुओं पर लागू होता है जब एक सदस्य चर का संदर्भ होता है?
धन्यवाद।
m_str.reserve(maxlength)में char * Size(int maxlength), अन्यथा नाशक फेंक सकता है।