Avatar ·

Qu'est-ce que la « Règle de trois » en C++ et pourquoi sa violation entraîne-t-elle des fuites mémoire ?

Bonjour ! J'ai commencé à étudier le C++ et j'ai rencontré une erreur incompréhensible. J'ai une classe `SimpleString` qui stocke une chaîne dynamique. J'ai écrit un constructeur et un destructeur, mais lorsque j'essaie de copier un objet ou d'en assigner un à un autre, le programme plante ou affiche des déchets. Voici un exemple de code : ```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; // Copie SimpleString c("World"); c = a; // Assignation return 0; } ``` Le programme plante avec une erreur double free ou affiche des chaînes corrompues. Je comprends que le problème vient du fait qu'après la copie, deux objets pointent vers le même