Avatar ·

¿Qué es la "Regla de los Tres" en C++ y por qué sin ella hay una fuga de memoria?

¡Hola a todos! Empecé a estudiar C++ y me encontré con un problema. Escribo una clase simple que almacena una cadena mediante memoria dinámica. Parece todo lógico, pero el programa se cuelga o se comporta de manera extraña. Aquí está mi código: ```cpp class String { public: String(const char* str = "") { size = strlen(str); data = new char[size + 1]; strcpy(data, str); } ~String() { delete[] data; } private: char* data; int size; }; int main() { String s1("Hello"); String s2 = s1; // Copia String s3("World"); s3 = s1; // Asignación return 0; } ``` Después de ejecutar, el programa falla con un error double free. Entiendo que el problema es que al copiar, ambos objetos apuntan a la misma memoria, y luego ambos intentan eliminarla. Pero, ¿cómo se corrige esto correctamente? ¿Qué es la "Regla de los Tres" que todos mencionan? ¿Y por qué dicen que en C++11 apareció la "Regla de los Cinco"? Agradecería una explicación detallada.