ما هي إيدومة Copy-and-Swap في C++ ومتى تستخدمها؟
مرحبًا بالجميع! بدأت في تعلم C++ وأحاول فهم كيفية إعادة تعريف operator= بشكل صحيح. أعلم أنني بحاجة إلى التحقق من التعيين الذاتي وتحرير الموارد القديمة، لكن الكود الخاص بي يبدو فظيعًا وأرتكب أخطاء باستمرار.
إليك مثال على صفي للعمل مع مصفوفة ديناميكية:
```cpp
class MyArray {
int* data;
size_t size;
public:
MyArray(size_t s) : size(s), data(new int[s]) {}
~MyArray() { delete[] data; }
// مشكلة في operator=
MyArray& operator=(const MyArray& other) {
if (this != &other) { // التحقق من التعيين الذاتي
delete[] data; // تحرير البيانات القديمة
size = other.size;
data = new int[size]; // تخصيص ذاكرة جديدة
std::copy(other.data, other.data + size, data);
}
return *this;
}
// copy constructor موجود أيضًا
MyArray(const MyArray& other) : size(other.size), data(new int[other.