सी ++ 03 में धारा 12.2.5 कहता है " में एक संदर्भ सदस्य के लिए अस्थायी बाध्य कन्स्ट्रक्टर का सीटीओ-प्रारंभकर्ता (12.6.2) तब तक बना रहता है जब तक कि निर्माता बाहर निकलता है "
तो मैं कार्यक्रम निम्नलिखित की कोशिश कीसीओटर प्रारंभकर्ता सूची में संदर्भित अस्थायी बाध्यकारी
#include<iostream>
using namespace std;
struct foo
{
foo()
{
cout<<"foo c'tor"<<endl;
}
~foo()
{
cout<<"foo d'tor"<<endl;
}
};
struct bar
{
const foo &ref;
bar():ref(foo())
{
cout<<"bar c'tor"<<endl;
}
};
int main()
{
bar obj;
}
उत्पादन मैं मिलता है:
foo c'tor
foo d'tor
bar c'tor
अब मानक के अनुसार, अस्थायी c'tor आरं में foo() द्वारा उत्पन्न बार के c'tor के बाद बार के c'tor की टी-सूची नष्ट हो जाएगी foo d'tor
के बाद मुद्रित किया जाना चाहिए, लेकिन यह दूसरी तरफ है।
कृपया कारण बताएं।
यदि आप निर्माता के अंदर 'रेफरी' का संदर्भ देते हैं तो क्या होता है? हो सकता है कि संकलक निर्णय लेता है कि चूंकि इसका उपयोग वास्तव में नहीं किया जाता है, यह पहले इसे नष्ट कर सकता है। –
वीएस -2008 'foo, bar, foo' आउटपुट का उत्पादन करता है जहां जीसीसी 4.3.4' foo, foo, bar' outputs उत्पन्न करता है। दिलचस्प ... – Naveen
जी ++ बग, रिपोर्ट। –