2010-11-30 8 views
5

एक ऑब्जेक्ट पॉइंटर की स्थिति क्या होगी जब कोई नया क्लास कन्स्ट्रक्टर सी ++ में अपवाद फेंकता है? उदाहरण के लिए निम्नलिखित कोड डालें:ऑब्जेक्ट पॉइंटर स्टेटस न्यू कन्स्ट्रक्टर के बाद अपवाद फेंकता है - सी ++

CMyClass * pobjMyClass = (CMyClass *)0xA5A5A5A5; 

try 
{ 
    pobjMyClass = new CMyClass(); // Exception thrown in constructor 
} 
catch (...) {} 

इस कोड को निष्पादित करता है जब क्या pobjMyClass का मूल्य, हो जाएगा के बाद अपवाद फेंक दिया जाता है? CMyClass, 0xA5A5A5A5, NULL, कुछ यादृच्छिक अनियमित मूल्य, या कुछ और के अमान्य उदाहरण के लिए एक सूचक? धन्यवाद।

+0

निश्चित रूप से आपने इसे आजमाया है? – TonyK

+2

@ टोनीके, चीजों को आज़माकर केवल आधा जवाब प्रदान करता है - यह आपके * कंपाइलर पर कैसे काम करता है। अक्सर यह जानना उपयोगी होता है कि यह सार्वभौमिक रूप से कैसे काम करता है। सी ++ नुकसान से भरा है, और सावधान रहना अच्छा है। –

+0

फिर भी, मार्क - निश्चित रूप से जिम ने इसे आजमाया है? क्या हुआ? – TonyK

उत्तर

6

चूंकि असाइनमेंट होने से पहले अपवाद फेंक दिया गया है, इसलिए pobjMyClass जो भी पहले था - आपके मामले में, 0xa5a5a5a5।

+0

+1 मेरा हटाना क्योंकि आपको वास्तव में सही जवाब मिला है :) –

+0

ठीक है, तकनीकी रूप से यह एक नया जवाब पोस्ट करने के लिए थोड़ा सा था, भले ही आपकी टिप्पणियों में टिप्पणी की गई थी और संपादन के बाद पूरी तरह से ठीक था। लेकिन धन्यवाद :) – EboMike

+4

अधिक सटीक होने के लिए, कन्स्ट्रक्टर के बाहर निकलने पर एक अनुक्रम बिंदु है, जिसका मतलब है कि असाइनमेंट का साइड इफेक्ट कन्स्ट्रक्टर रिटर्न से पहले नहीं हो सकता है। चूंकि कन्स्ट्रक्टर वापस नहीं आता है, इसलिए असाइनमेंट कभी नहीं होता है। – aschepler

संबंधित मुद्दे