Three/Five का नियम
कॉपी और मूव सही ढंग से प्रबंधित करें
Three/Five का नियम, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 3वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
तीन का नियम
यदि किसी क्लास को कस्टम डिस्ट्रक्टर की आवश्यकता है, तो लगभग हमेशा उसे कस्टम कॉपी कंस्ट्रक्टर और कॉपी असाइनमेंट की भी आवश्यकता होती है। ये तीनों साथ चलते हैं।
तीन क्यों
कच्चे संसाधन का प्रबंधन करने वाली क्लास को यह परिभाषित करना चाहिए कि उसे कैसे नष्ट, कॉपी और असाइन किया जाए — अन्यथा कंपाइलर द्वारा बनाई गई उथली कॉपियाँ दोहरी मुक्ति का कारण बनती हैं।
#include <iostream>
class Bad {
int* p;
public:
Bad(int v) : p(new int(v)) {}
~Bad() { delete p; }
// default copy => two objects delete the same p!
};कस्टम प्रतिलिपि निर्माता
एक सही प्रतिलिपि निर्माता गहन प्रतिलिपि बनाता है और संसाधन साझा करने के बजाय अपना अलग संसाधन आवंटित करता है।
#include <iostream>
class Box {
int* p;
public:
Box(int v) : p(new int(v)) {}
Box(const Box& o) : p(new int(*o.p)) {} // deep copy
~Box() { delete p; }
int get() const { return *p; }
};
int main() {
Box a(5);
Box b = a; // independent copy
std::cout << b.get() << "\n";
}कस्टम प्रतिलिपि असाइनमेंट
प्रतिलिपि असाइनमेंट में पुराने संसाधन को मुक्त करना, स्वयं को असाइन करने से बचना और नए मान की गहन प्रतिलिपि बनाना आवश्यक है।
Box& operator=(const Box& o) {
if (this != &o) { // self-assignment guard
delete p;
p = new int(*o.p);
}
return *this;
}पाँच का नियम
C++11 में स्थानांतरण संचालन जोड़े गए हैं। यदि आप पाँच में से किसी एक (विनाशक, प्रतिलिपि निर्माता, प्रतिलिपि असाइनमेंट, स्थानांतरण निर्माता, स्थानांतरण असाइनमेंट) को परिभाषित करते हैं, तो सभी पाँच को परिभाषित करने पर विचार करें।
स्थानांतरण निर्माता
स्थानांतरण निर्माता किसी अस्थायी वस्तु से संसाधन हड़प लेता है और स्रोत को खाली छोड़ देता है — यह प्रतिलिपि बनाने से बहुत कम खर्चीला है।
Box(Box&& o) noexcept : p(o.p) {
o.p = nullptr; // source left empty
}स्थानांतरण असाइनमेंट
स्थानांतरण असाइनमेंट वर्तमान संसाधन को मुक्त करता है और फिर स्रोत के संसाधन का स्वामित्व ले लेता है।
Box& operator=(Box&& o) noexcept {
if (this != &o) {
delete p;
p = o.p;
o.p = nullptr;
}
return *this;
}स्थानांतरणों को noexcept चिह्नित करें
स्थानांतरण संचालनों को noexcept होना चाहिए, ताकि पुनःआवंटन करते समय std::vector जैसे कंटेनर उनका सुरक्षित रूप से उपयोग कर सकें।
शून्य का नियम
सबसे अच्छा तरीका है कि किसी कच्चे संसाधन का स्वामित्व ही न लें। std::unique_ptr, std::vector या std::string का उपयोग करने पर आपको पाँच में से कोई भी संचालन परिभाषित नहीं करना पड़ता — कंपाइलर की डिफ़ॉल्ट परिभाषाएँ सही होती हैं।
#include <memory>
class Good {
std::unique_ptr<int> p; // owns the resource for you
public:
Good(int v) : p(std::make_unique<int>(v)) {}
// no destructor, no copy/move needed
};संचालनों को हटाना
यदि प्रतिलिपि बनाने का कोई अर्थ नहीं है, तो उसे हटा दें: Box(const Box&) = delete;। इससे प्रकार को जानबूझकर केवल-स्थानांतरण योग्य या गैर-प्रतिलिप्य बनाया जा सकता है।
सही नियम चुनना
शून्य के नियम को अपनाने का लक्ष्य रखें। पाँच के नियम का सहारा केवल तब लें, जब आप वास्तव में ऐसे कच्चे संसाधन को लपेट रहे हों जिसे मानक पुस्तकालय संभाल नहीं सकता।
त्वरित जाँच
तीन/पाँच के नियम की अपनी समझ जाँचें।
पुनरावलोकन
आपने तीन/पाँच का नियम सीखा: कच्चे संसाधन को संभालने के लिए विनाशक, प्रतिलिपि और स्थानांतरण संचालनों को एकसमान रूप से परिभाषित करना आवश्यक है। स्थानांतरणों को noexcept चिह्नित करें। सबसे अच्छा तरीका है कि मानक RAII प्रकारों का उपयोग करके शून्य के नियम का पालन करें और इनमें से कोई भी संचालन परिभाषित न करें।
एआई शिक्षक के साथ C++ सीखें — निःशुल्क
अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।
- पाठ्यक्रम
- 51
- पाठ
- 203
अक्सर पूछे जाने वाले प्रश्न
क्या “Three/Five का नियम” पाठ निःशुल्क है?
हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “Three/Five का नियम” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।
“Three/Five का नियम” में मैं क्या सीखूँगा?
कॉपी और मूव सही ढंग से प्रबंधित करें आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।
क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?
पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 3वाँ पाठ है।
“Three/Five का नियम” पाठ पूरा करने में कितना समय लगता है?
CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।
क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?
हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।
इस पाठ्यक्रम के सभी पाठ
- RAII सिद्धांत
- डिस्ट्रक्टर और सफ़ाई
- Three/Five का नियम
- स्कोप गार्ड