में एक विधि को कॉल करना हर्ब सटर अपने http://www.gotw.ca लेखों में से एक में उल्लेख करता है कि एक ऑब्जेक्ट बनाया गया है (वैध अस्तित्व है) केवल अगर कन्स्ट्रक्टर निष्पादित करता है तो इसे एक कच्चे तरीके से नियंत्रित करने के लिए इसे अपने अंतिम ब्रेस से परे पास करता है।कन्स्ट्रक्टर
अब कोड निम्नलिखित
class A
{
public:
A()
{
f();
}
void f()
{
cout << "hello, world";
}
};
int main()
{
A a;
}
अब क्या हर्ब कहते से विचार करें, हम यह नहीं कह सकते निर्माता के अंदर के रूप में "यह अमान्य है कि जब एक पूरी तरह से() के अंदर अपने निर्माता कॉलिंग च का निर्माण नहीं किया गया है "पीटीआर अभी तक तैयार नहीं है।
अभी भी निर्माता के अंदर वास्तव में एक वैध "यह" है और f() कहा जाता है।
मुझे नहीं लगता कि हर्ब कुछ गलत कह रहा है ... लेकिन अनुमान है कि मैं इसे गलत तरीके से व्याख्या कर रहा हूं .... क्या कुछ मुझे बता सकते हैं कि वास्तव में क्या है?
यहां लेख का लिंक है: http://www.gotw.ca/gotw/066.htm यह रचनाकारों के अपवादों के बारे में बात करता है। विशेष रूप से यहां से निकाला गया है जिस पर मेरा प्रश्न आधारित है:
- जब कोई ऑब्जेक्ट का जीवनकाल शुरू होता है? जब इसका कन्स्ट्रक्टर सफलतापूर्वक पूरा हो जाता है और सामान्य रूप से लौटाता है। यही है, नियंत्रण कन्स्ट्रक्टर बॉडी या पहले के रिटर्न स्टेटमेंट के अंत तक पहुंचता है।
- जब किसी ऑब्जेक्ट का जीवनकाल समाप्त होता है? जब इसके विनाशक शुरू होता है। यही है, नियंत्रण विनाशक शरीर की शुरुआत तक पहुंचता है। यहां महत्वपूर्ण बिंदु यह है कि वस्तु का राज्य अपने जीवनकाल से पहले ठीक उसी तरह होता है जैसा कि उसके जीवनकाल के समाप्त होने के बाद होता है - कोई वस्तु नहीं होती है, अवधि होती है।
हम सी ++ निर्माता मॉडल के रूप में निम्नानुसार संक्षेप में प्रस्तुत कर सकते हैं:
Either:
(a) The constructor returns normally by reaching its end or a return statement, and the object exists.
Or:
(b) The constructor exits by emitting an exception, and the object not only does not now exist, but never existed.
है "ऐसा लगता है कि आप ध्यान से पढ़ें नहीं किया हर्ब Sutter लेख।" - थोड़ा कठोर विचार है कि आप अभी तक लेख पर अपना हाथ नहीं डाल सकते ... – razlebe
@sgreeve: कठोर? क्यूं कर? – Nawaz
आप मान रहे हैं कि ओपी ने लेख को ध्यान से नहीं पढ़ा है। लेख को देखे बिना, आप नहीं जानते कि क्या यह स्थिति अच्छी तरह से समझाया गया है, अगर बिलकुल भी। – razlebe