मैं समझने की कोशिश कर रहा था कि this blog पढ़कर शून्य का नियम क्या कहता है। आईएमओ, यह कहता है कि यदि आप अपना खुद का विनाशक घोषित करते हैं तो चालक कन्स्ट्रक्टर बनाना और डिफ़ॉल्ट रूप से असाइनमेंट को स्थानांतरित करना न भूलें।विनाशक अंतर्निहित चाल तरीकों की पीढ़ी को अक्षम क्यों करता है?
class Widget {
public:
~Widget(); // temporary destructor
... // no copy or move functions
};
"नाशक के अलावा इस कदम कार्यों का पीढ़ी को निष्क्रिय करने के पक्ष प्रभाव पड़ता है, लेकिन क्योंकि विजेट copyable है, सभी कोड चाल उत्पन्न करने के लिए प्रयोग किया जाता है कि होगा अब प्रतियां उत्पन्न करें। अन्य शब्दों में, कक्षा में विनाशक को संभावित रूप से कुशल चालों को संभावित रूप से कम-कुशल प्रतियों के साथ चुपचाप बदल दिया गया है।
स्कॉट Meyers द्वारा ऊपर पाठ, अंदर उद्धरण मेरे मन में कुछ सवाल उठा:
- क्यों घोषित नाशक छुपाता चाल अर्थ विज्ञान?
- घोषित/निश्चित विनाशक केवल चाल semantics छुपाता है या कन्स्ट्रक्टर और प्रतिलिपि असाइनमेंट की प्रतिलिपि बनाता है और साथ ही चाल semantics छुपाता है?
इस नियम के पीछे तर्क था कि यदि आपके कोड एक कस्टम नाशक है, यह शायद इसलिए है क्योंकि एक संसाधन मुक्त कर दिया जाना चाहिए; और यदि किसी संसाधन को मुक्त करने की आवश्यकता है तो चाल के डिफ़ॉल्ट कार्यान्वयन स्रोत वस्तु को एक फर्जी स्थिति में छोड़ सकता है। –