Avatar ·

O que é a 'Regra dos Três' em C++ e por que sua violação leva a vazamentos de memória?

Olá! Comecei a estudar C++ e me deparei com um erro estranho. Tenho uma classe `SimpleString` que armazena uma string dinâmica. Escrevi o construtor e o destrutor, mas quando tento copiar um objeto ou atribuir um objeto a outro, o programa trava ou exibe lixo. Aqui está um exemplo de código: ```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; // Cópia SimpleString c("World"); c = a; // Atribuição return 0; } ``` O programa trava com um erro double free ou exibe strings distorcidas. Entendo que o problema é que, após a cópia, dois objetos apontam para o mesmo