¿Qué es la 'Regla de los Tres' en C++ y por qué su violación provoca fugas de memoria?
¡Hola! Empecé a estudiar C++ y me encontré con un error que no entiendo. Tengo una clase `SimpleString` que almacena una cadena dinámica. Escribí el constructor y el destructor, pero cuando intento copiar un objeto o asignar un objeto a otro, el programa se cuelga o muestra basura. Aquí hay un ejemplo 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; // Copia
SimpleString c("World");
c = a; // Asignación
return 0;
}
```
El programa se cuelga con un error double free o muestra cadenas distorsionadas. Entiendo que el problema es que después de la copia, dos objetos apuntan al mismo