C++ का उपयोग करते समय तीन का नियम अंगूठे का नियम है। यह एक अच्छा अभ्यास नियम है जो कहता है कि यदि आपकी कक्षा को इनमें से किसी की आवश्यकता है
- एक कॉपी कंस्ट्रक्टर,
- असाइनमेंट ऑपरेटर,
- या विध्वंसक,
स्पष्ट रूप से परिभाषित किया गया है, तो इन तीनों की आवश्यकता होने की संभावना है।
ऐसा क्यों है? इसका कारण यह है कि, यदि आपकी कक्षा को उपरोक्त में से किसी की आवश्यकता है, तो यह गतिशील रूप से आवंटित संसाधनों का प्रबंधन कर रहा है और इसे सफलतापूर्वक प्राप्त करने के लिए दूसरे की आवश्यकता होगी। उदाहरण के लिए, यदि आपको एक असाइनमेंट ऑपरेटर की आवश्यकता है, तो आप वर्तमान में संदर्भ द्वारा कॉपी की जा रही वस्तुओं की प्रतियां बना रहे होंगे, इसलिए संसाधनों का आवंटन। इन संसाधनों को मुक्त करने के लिए आपको प्रतिलिपि बनाने वाले और विनाशक के लिए प्रतिलिपि बनाने वाले की आवश्यकता होगी।
पांच का नियम C++11 में चाल शब्दार्थ की शुरूआत के कारण तीन के नियम का विस्तार है। संसाधन प्रबंधन के लिए C++ में भी पांच का नियम लागू होता है। यह नियम C++ कोड में मेमोरी लीक और अन्य समस्याओं को संभावित रूप से समाप्त करता है। द बिग फाइव का नियम कहता है कि यदि आपको निम्नलिखित में से कोई एक कार्य लिखना है तो आपको उन सभी के लिए एक नीति बनानी होगी। यदि हमारे पास ऑब्जेक्ट फू है तो हमारे पास एक FooManager हो सकता है जो संसाधन Foo को संभालता है। FooManager को लागू करते समय, संभवतः आपको निम्नलिखित सभी कार्यों को लागू करने की आवश्यकता होगी -
-
विध्वंसक - जब यह प्रबंधक दायरे से बाहर हो जाता है तो उसे उन सभी संसाधनों को मुक्त कर देना चाहिए जिन्हें वह प्रबंधित कर रहा था।
-
असाइनमेंट ऑपरेटर - यदि आप एक प्रदान नहीं करते हैं तो कंपाइलर एक डिफ़ॉल्ट असाइनमेंट ऑपरेटर बनाता है। डिफ़ॉल्ट असाइनमेंट ऑपरेशन एक सदस्य-वार कॉपी फ़ंक्शन है और एक उथली प्रतिलिपि करता है न कि एक गहरी प्रतिलिपि। इससे मेमोरी लीक, गलत असाइनमेंट जैसी समस्याएं हो सकती हैं।
-
कॉपी कंस्ट्रक्टर - कंपाइलर द्वारा आपूर्ति की गई कॉपी कंस्ट्रक्टर सभी FooManagers विशेषताओं की सदस्य-वार कॉपी करता है। यह असाइनमेंट ऑपरेटर के समान ही समस्याएं उत्पन्न करता है।
-
मूव कंस्ट्रक्टर - वस्तुओं की नकल करना महंगा हो सकता है क्योंकि इसमें अस्थायी वस्तुओं को बनाना, कॉपी करना और फिर नष्ट करना शामिल है। सी ++ 11 ने आर-वैल्यू संदर्भ की अवधारणा पेश की। एक आर-मान संदर्भ स्पष्ट रूप से एक आर-मान के लिए बाध्य किया जा सकता है। एक r-मान एक अनाम वस्तु है। एक अस्थायी वस्तु, दूसरे शब्दों में। इस आर-वैल्यू रेफरेंस का इस्तेमाल कंस्ट्रक्टर में पास किए गए आर-वैल्यू का रेफरेंस बनाने के लिए किया जा सकता है
-
मूव कंस्ट्रक्टर - वस्तुओं की नकल करना महंगा हो सकता है क्योंकि इसमें अस्थायी वस्तुओं को बनाना, कॉपी करना और फिर नष्ट करना शामिल है। सी ++ 11 ने आर-वैल्यू संदर्भ की अवधारणा पेश की। एक आर-मान संदर्भ स्पष्ट रूप से एक आर-मान के लिए बाध्य किया जा सकता है। एक r-मान एक अनाम वस्तु है। एक अस्थायी वस्तु, दूसरे शब्दों में। इस आर-वैल्यू रेफरेंस का इस्तेमाल कंस्ट्रक्टर में पास किए गए आर-वैल्यू का रेफरेंस बनाने के लिए किया जा सकता है।
-
मूव असाइनमेंट ऑपरेटर - एक समय में केवल एक संसाधन होना उपयोगी है। इस संसाधन का स्वामित्व एक प्रबंधक से दूसरे प्रबंधक को हस्तांतरित किया जा सकता है। ऐसे मामलों में, आप मूव असाइनमेंट ऑपरेटर प्रदान कर सकते हैं।
पांच के नियम के बारे में जानने के लिए यह एक बेहतरीन संसाधन है - https://www.feabhas.com/sites/default/files/2016-06/Rule%20of%20the%20Big%20Five.pdf।