Avatar ·

¿Qué es el idiom Copy-and-Swap en C++ y cuándo usarlo?

¡Hola a todos! He empezado a aprender C++ y estoy tratando de entender la correcta sobrecarga del operador de asignación. Sé que debo verificar la autoasignación y liberar los recursos antiguos, pero mi código se ve horrible y cometo errores constantemente. Aquí hay un ejemplo de mi clase para trabajar con un array dinámico: ```cpp class MyArray { int* data; size_t size; public: MyArray(size_t s) : size(s), data(new int[s]) {} ~MyArray() { delete[] data; } // Operador de asignación problemático MyArray& operator=(const MyArray& other) { if (this != &other) { // verificación de autoasignación delete[] data; // liberamos los datos antiguos size = other.size; data = new int[size]; // asignamos nueva memoria std::copy(other.data, other.data + size, data); } return *this; } // También tengo el constructor de copia MyArray(const MyArray& other) : size(other.size), data(new int[other.size]) { std::copy(other.data, other.data + other.size, data); } }; ```