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.