This answer उद्धरण सी ++ 11 स्टैंडर्ड 3.8:सी ++ 11 में एक साइड इफेक्ट अपरिभाषित व्यवहार के साथ एक ऑब्जेक्टर को नष्ट करने वाला ऑब्जेक्ट क्यों नहीं हटा रहा है?
अगर वहाँ नाशक करने के लिए या तो एक हटाने अभिव्यक्ति (5.3.5) भंडारण जारी करने के लिए नहीं किया जाता है कोई स्पष्ट कॉल है, नाशक नहीं होगा निहित रूप से बुलाया गया और कोई भी प्रोग्राम जो कि विनाशक द्वारा उत्पादित पक्ष ई एफएफ ईक्ट्स पर निर्भर करता है, में अवांछित व्यवहार है।
विनाशक के बारे में हिस्सा स्पष्ट नहीं है। अब मान लीजिए कि छोड़े गए विनाशक का दुष्प्रभाव था जिसने प्रोग्राम व्यवहार को प्रभावित किया होगा।
प्रोग्राम व्यवहार अब अपरिभाषित क्यों है? साइड इफेक्ट्स क्यों नहीं छोड़े जाएंगे (क्योंकि विनाशक को नहीं कहा जाता है) और कार्यक्रम सामान्य रूप से बिना साइड इफेक्ट्स के लागू होता है?
दिलचस्प सवाल। लेकिन जब कोई व्यक्ति की आवश्यकता नहीं होती है तो कोई वस्तु पर विनाशक को क्यों नहीं बुलाएगा? – ereOn
यदि इस मामले में विनाशक पूर्व के लिए गैर-छोटे कार्यों को निष्पादित करता है: बंद संसाधन संसाधन संभालता है या कुछ मान्य आदि को स्थिति सेट करता है, तो विनाशक को बुलाया नहीं जा रहा है कार्यक्रम का असर होगा और परिणामस्वरूप अपरिभाषित व्यवहार होगा। मैं तर्क को समझ नहीं पा रहा हूं साइड इफेक्ट्स छोड़ने के लिए। –
@ereOn: सिंगलेट्स का उपयोग एक केस के रूप में किया गया है (हालांकि, हालांकि इसे अच्छा डिजाइन नहीं माना जाना चाहिए)। –