ما هي «قاعدة الثلاثة» في 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 أو يطبع سلاسل مشوهة. أفهم أن المشكلة تكمن في أنه بعد النسخ، يشير كائنان إلى نفس