सरल शब्दों में एक "तुच्छ" विशेष सदस्य समारोह का शाब्दिक अर्थ है एक सदस्य समारोह जो इसकी नौकरी को बहुत सरल तरीके से करता है। "सरल तरीके" का अर्थ विभिन्न प्रकार के विशेष सदस्य कार्यों के लिए अलग-अलग चीज है।
एक डिफ़ॉल्ट कन्स्ट्रक्टर और विनाशक के लिए "तुच्छ" होने का अर्थ शाब्दिक रूप से "कुछ भी नहीं करना" है। कॉपी-कन्स्ट्रक्टर और कॉपी-असाइनमेंट ऑपरेटर के लिए, "तुच्छ" होने का अर्थ शाब्दिक रूप से "सरल कच्चे मेमोरी प्रतिलिपि के बराबर होना" (जैसे memcpy
के साथ प्रतिलिपि)।
यदि आप स्वयं को एक कन्स्ट्रक्टर परिभाषित करते हैं, तो इसे गैर-तुच्छ माना जाता है, भले ही यह कुछ भी नहीं करता है, इसलिए एक छोटे कन्स्ट्रक्टर को संकलक द्वारा निहित रूप से परिभाषित किया जाना चाहिए।
उपर्युक्त आवश्यकताओं को पूरा करने के लिए एक विशेष सदस्य कार्य के लिए, कक्षा में एक बहुत ही सरल संरचना होनी चाहिए, किसी वस्तु को बनाया या नष्ट होने पर, या किसी छिपी हुई अतिरिक्त आंतरिक कुशलता के दौरान किसी छिपी हुई प्रारंभिक आवश्यकता की आवश्यकता नहीं होनी चाहिए कॉपी किया जा रहा है।
उदाहरण के लिए, यदि कक्षा में वर्चुअल फ़ंक्शंस हैं, तो इस वर्ग की ऑब्जेक्ट्स (वर्चुअल विधि तालिका और इस तरह की शुरूआत) को बनाए जाने पर कुछ अतिरिक्त छिपी हुई प्रारंभिकताओं की आवश्यकता होगी, इसलिए इस वर्ग के निर्माता छोटे के रूप में योग्य नहीं होंगे।
एक और उदाहरण के लिए, यदि किसी वर्ग में वर्चुअल बेस क्लास हैं, तो इस श्रेणी के प्रत्येक ऑब्जेक्ट में छुपे पॉइंटर्स हो सकते हैं जो एक ही ऑब्जेक्ट के अन्य हिस्सों को इंगित करते हैं। इस तरह की एक स्व-रेफरेंसियल ऑब्जेक्ट को एक साधारण कच्ची मेमोरी प्रति दिनचर्या (जैसे memcpy
) द्वारा प्रतिलिपि नहीं बनाई जा सकती है। प्रतिलिपि में छिपे हुए पॉइंटर्स को सही ढंग से पुन: प्रारंभ करने के लिए अतिरिक्त कुशलताएं आवश्यक होंगी। इस कारण से इस वर्ग के लिए कॉपी कन्स्ट्रक्टर और कॉपी-असाइनमेंट ऑपरेटर तुच्छ के रूप में योग्य नहीं होगा।
स्पष्ट कारणों से, यह आवश्यकता रिकर्सिव है: कक्षा के सभी उपनिवेश (आधार और गैर स्थैतिक सदस्यों) में भी छोटे कन्स्ट्रक्टर होना चाहिए।
कुछ भी नहीं ... फिर एक प्रति असाइनमेंट ऑपरेटर क्या है? ;) –
इसके अलावा मुझे एक नॉट्रिचर सीटर जैसे (रेक्ट आर) {एल = आर ....} –
@ एसिडज़ॉम्बी 24: मैंने सदस्य कार्यों को कॉपी करने के लिए कुछ सुधार किए हैं। आपकी दूसरी टिप्पणी मुझे स्पष्ट नहीं है। कोई भी उपयोगकर्ता परिभाषित कन्स्ट्रक्टर गैर-तुच्छ है, इसलिए एक बार जब आप इसे परिभाषित कर लेंगे, तो कक्षा अब एक पीओडी नहीं है। – AnT