Avatar ·

O que é a idiomática Copy-and-Swap em C++ e quando usá-la?

Olá a todos! Comecei a aprender C++ e estou tentando entender a sobrescrita correta do operador de atribuição. Sei que preciso verificar a auto-atribuição e liberar recursos antigos, mas meu código parece horrível e estou constantemente cometendo erros. Aqui está um exemplo da minha classe para trabalhar com 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 atribuição problemático MyArray& operator=(const MyArray& other) { if (this != &other) { // verificação de auto-atribuição delete[] data; // libera dados antigos size = other.size; data = new int[size]; // aloca nova memória std::copy(other.data, other.data + size, data); } return *this; } // Construtor de cópia também existe MyArray(const MyArray& other) : size(other.size), data(new int[other.