Avatar ·

ما هي «قاعدة الثلاثة» في C++ ولماذا يؤدي انتهاكها إلى تسرب الذاكرة؟

مرحبًا! بدأت في تعلم C++ وواجهت خطأ غير مفهوم. لدي كلاس `SimpleString` يخزن سلسلة ديناميكية. كتبت constructor و destructor، ولكن عندما أحاول نسخ كائن أو تعيين كائن لآخر، يتعطل البرنامج أو يطبع بيانات غير صحيحة. إليك مثال الكود: ```cpp #include #include class SimpleString { public: char* data; SimpleString(const char* str) { data = new char[strlen(str) + 1]; strcpy(data, str); std::cout << "Constructed: " << data << std::endl; } ~SimpleString() { delete[] data; std::cout << "Destructed" << std::endl; } }; int main() { SimpleString a("Hello"); SimpleString b = a; // نسخ SimpleString c("World"); c = a; // تعيين return 0; } ``` يتعطل البرنامج بخطأ double free أو يطبع سلاسل مشوهة. أفهم أن المشكلة تكمن في أنه بعد النسخ، يشير كائنان إلى نفس