कभी-कभी आपको एक रचनाकार लिखने की ज़रूरत होती है जो विफल हो सकती है। उदाहरण के लिए, मान लीजिए कि मैं किसी फ़ाइल पथ के साथ किसी वस्तु को त्वरित करना चाहता हूं, जैसे कुछ
obj = new Object("/home/user/foo_file")
जब तक पथ एक उपयुक्त फ़ाइल को इंगित करता है सब कुछ ठीक है। लेकिन अगर स्ट्रिंग एक वैध मार्ग नहीं है तो चीजों को तोड़ देना चाहिए। पर कैसे?
आप ऐसा कर सकते हैं:
- एक अपवाद फेंक दो
- वापसी अशक्त वस्तु (यदि आपकी प्रोग्रामिंग भाषा कंस्ट्रक्टरों को मान वापस करने की अनुमति देती है)
- एक वैध वस्तु लौटाएं लेकिन एक झंडे के साथ जो यह दर्शाता है कि उसका रास्ता ठीक से सेट नहीं किया गया था (ugh)
- अन्य?
मुझे लगता है कि विभिन्न प्रोग्रामिंग भाषाओं के "सर्वोत्तम अभ्यास" इसे अलग तरीके से लागू करेंगे। उदाहरण के लिए, मुझे लगता है कि ObjC पसंद (2)। लेकिन (2) सी ++ में लागू करना असंभव होगा जहां निर्माणकर्ताओं को रिटर्न प्रकार के रूप में शून्य होना चाहिए। उस स्थिति में मैं इसे लेता हूं कि (1) का उपयोग किया जाता है।
अपनी पसंद की प्रोग्रामिंग भाषा में आप यह दिखा सकते हैं कि आप इस समस्या को कैसे संभालेंगे और समझाएँगे क्यों?
void
- वे एक ऑब्जेक्ट वापस करते हैं।
new
कॉल operator new
करता है, फिर इसे भरने के लिए कंस्ट्रक्टर। कंस्ट्रक्टर कुछ भी नहीं लौटाता है, और new
उस पॉइंटर को लौटा देता है जो उसे मिला है operator new
। चाहे "कुछ भी वापस नहीं करता है" "रिटर्न void
" का अर्थ है, हालांकि, कब्रों के लिए है।