आपका सवाल तब अपवाद गारंटी के बारे में एक प्रश्न के बराबर है। 3 प्रकार की अपवाद गारंटीएं हैं (जो फ़ंक्शंस पर लागू होती हैं):
- बिल्कुल अपवाद गारंटी नहीं (वास्तव में एक प्रकार नहीं ...लेकिन यह भी हो सकता है यदि कोई चिंता बात को दिया जाता है)
- बेसिक अपवाद गारंटी: तकनीकी रूप से सही है, लेकिन कार्यात्मक सही नहीं (यानी कोई संसाधन लीक कर रहा है, इस कार्यक्रम अचानक पड़ाव के बिना समाप्त कर देगा, लेकिन यह अवांछित हो सकता है साइड इफेक्ट्स, जैसे कि भुगतान किया जा रहा है, लेकिन कमांड पंजीकृत नहीं है)
- मजबूत अपवाद गारंटी: सभी या कुछ भी नहीं (लेनदेन की तरह), या तो सब कुछ ठीक हो गया है, या हम पिछले के लिए रोलबैक राज्य।
- कोई फेंक अपवाद गारंटी: यह कभी फेंक नहीं देता है, इसलिए कोई चिंता नहीं है।
जब आप अपना कार्य लिखते हैं, तो आप आमतौर पर मौजूदा कार्यों को अपनी गारंटी के साथ उठाते हैं। अपवाद गारंटी को बढ़ाना मुश्किल है, यह आमतौर पर उपयोग की जाने वाली कमजोर गारंटी से सीमित है।
W.r.t आपका प्रश्न, कम से कम मजबूत अपवाद गारंटी मूल ऑब्जेक्ट को अपवादित होने पर छोड़ा जाने वाला मूल ऑब्जेक्ट छोड़ने के लिए लेता है।
तो, क्या होता है यदि चाल-निर्माण के दौरान कोई अपवाद फेंक दिया जाता है? यह गारंटी देता है subobjects और जिस तरह से आप कॉल संयुक्त द्वारा प्रदर्शित पर निर्भर करता है ...
- एक अपवाद है, एक निर्माता से फेंक दिया जाता है वस्तु नहीं बनाया जा रहा है और सभी का निर्माण किया subobjects नष्ट कर रहे हैं, तो में उल्टे क्रम। यह नियम एक चालक-निर्माता
- पर भी लागू होता है जब तक कि आप कन्स्ट्रक्टर को कोशिश करने में "लपेटें" नहीं देते हैं और किसी भी तरह से स्थानांतरित किए गए ऑब्जेक्ट को पुनर्स्थापित करते हैं, तो वे अपने संसाधन खो देंगे। ध्यान दें कि वे अभी भी एक विनाशकारी स्थिति में होना चाहिए, इसलिए तकनीकी रूप से कार्यक्रम सही होगा।
अपवाद की गारंटी देता है के संदर्भ में, इसका मतलब है कि डिफ़ॉल्ट रूप से, subobjects 'कंस्ट्रक्टर्स के सभी कम से कम बेसिक अपवाद गारंटी को पूरा है, तो अपनी चाल निर्माता होगा भी, किसी भी विशेष देखभाल के बिना।
हालांकि, यहां तक कि अगर सब subobjects 'कंस्ट्रक्टर्स मजबूत अपवाद गारंटी पूरा बहुत संभव है कि आप अपने खुद के चाल निर्माता यह पूरा होने में सफल हो जाएगा: यह एक ही मुद्दा है कि लेन-देन चेनिंग एक सौदे उपज नहीं है।
तो subobjects 'निर्माताओं की केवल एक ही फेंक सकता है, और यह मजबूत अपवाद गारंटी को पूरा करती है, तो अपनी चाल निर्माता स्वाभाविक रूप से यह अपने आप को पूरा करेगा अगर तुम फेंक वस्तु पहले आरंभ कर देगा।
आशा इस मदद की ... अपवाद को वश में करने :)
स्रोत
2011-01-19 08:25:39
मैं अगर यह नाशक जहां यह सिर्फ एक बुरी चीज़ है अगर यह एक अपवाद फेंकता की तरह है सोच रहा हूँ एक जंगली जानवर हैं। मुझे लगता है कि ज्यादातर मामलों में आप कभी भी ऐसा कुछ भी कर सकते हैं जो फेंक सकता है, क्योंकि आप (आमतौर पर) बस पॉइंटर्स को चारों ओर ले जा रहे हैं ... – templatetypedef
तो आप क्या कह रहे हैं कि कोई अपवाद नहीं होना चाहिए फेंक दिया जा रहा है क्योंकि सदस्यों की राज्य की प्रतिलिपि बनाई जा रही है, कभी भी चालन अभियान के दौरान उत्परिवर्तित नहीं किया जाता है? –
सॉर्टा- यह आपके द्वारा उपयोग किए जाने वाले अपरिवर्तनीय तर्क के समान है कि 'स्वैप' फेंक नहीं सकता है। आधारभूत मामले के रूप में, आदिवासियों को फिर से सौंपना और प्रतिलिपि बनाना कभी नहीं फेंकता है। एक अपरिवर्तनीय कदम के रूप में, कुछ डेटा सदस्यों के साथ किसी ऑब्जेक्ट के लिए एक चालक कन्स्ट्रक्टर उन डेटा सदस्यों को फेंकने के बिना स्थानांतरित कर सकता है (अपरिवर्तनीय परिकल्पना!), और इसलिए फेंकने के बिना खुद को स्थानांतरित कर सकते हैं। स्वतंत्र रूप से, हालांकि, मैं अभी भी जानना चाहता हूं कि आपके प्रश्न का सही उत्तर क्या है। – templatetypedef