ऐसा क्यों होता है:
#include <string>
#include <iostream>
using namespace std;
class Sandbox
{
public:
Sandbox(const string& n) : member(n) {}
const string& member;
};
int main()
{
Sandbox sandbox(string("four"));
cout << "The answer is: " << sandbox.member << endl;
return 0;
}
का आउटपुट दें:
उत्तर है:
के बजाय:
जवाब है: चार
SandBox::member
पढ़ा जाता है, तो अस्थायी स्ट्रिंग अभी भी जीवित है ।
string("four")
पूर्ण अभिव्यक्ति के अंत में अस्थायी को क्यों नष्ट किया जाता है, और Sandbox
निर्माणकर्ता के बाहर निकलने के बाद नहीं ? पोटैटोस्वाटर का उत्तर कहता है कि एक कंस्ट्रक्टर के ctor-initializer ([12.6.2 [class.base.init]) में एक संदर्भ सदस्य के लिए एक अस्थायी बाध्य तब तक बनी रहती है जब तक कि कंस्ट्रक्टर बाहर नहीं निकल जाता है।
cout << "The answer is: " << Sandbox(string("four")).member << endl;
, तो यह काम करने की गारंटी होगी।