Avatar ·

C++ में "तीन का नियम" क्या है और इसके बिना मेमोरी लीक क्यों होती है?

सभी को नमस्ते! मैंने C++ सीखना शुरू किया है और एक समस्या का सामना किया। मैं एक सरल class लिख रहा हूँ जो dynamic memory के माध्यम से एक string संग्रहीत करता है। सब कुछ तार्किक लगता है, लेकिन प्रोग्राम क्रैश हो जाता है या अजीब व्यवहार करता है। यहाँ मेरा कोड है: ```cpp class String { public: String(const char* str = "") { size = strlen(str); data = new char[size + 1]; strcpy(data, str); } ~String() { delete[] data; } private: char* data; int size; }; int main() { String s1("Hello"); String s2 = s1; // कॉपी करना String s3("World"); s3 = s1; // असाइनमेंट return 0; } ``` प्रोग्राम चलाने के बाद यह double free त्रुटि के साथ क्रैश हो जाता है। मैं समझता हूँ कि समस्या यह है कि कॉपी करते समय दोनों objects एक ही मेमोरी को इंगित करते हैं, और फिर दोनों इसे हटाने का प्रयास करते हैं। लेकिन इसे सही तरीके से कैसे ठीक करें? "तीन का नियम" क्या है जिसका सभी उल्लेख करते हैं? और क्यों कहा जाता है कि C++11 में "पाँच का नियम" आया? विस्तृत स्पष्टीकरण के लिए आभारी रहूँगा।