Avatar ·

Qu'est-ce que la "Règle de trois" en C++ et pourquoi sans elle une fuite mémoire ?

Bonjour à tous ! J'ai commencé à étudier le C++ et j'ai rencontré un problème. J'écris une classe simple qui stocke une chaîne via la mémoire dynamique. Tout semble logique, mais le programme plante ou se comporte étrangement. Voici mon code : ```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; // Copie String s3("World"); s3 = s1; // Assignation return 0; } ``` Après exécution, le programme plante avec une erreur double free. Je comprends que le problème est que lors de la copie, les deux objets pointent vers la même mémoire, puis les deux essaient de la libérer. Mais comment corriger cela correctement ? Qu'est-ce que la "Règle de trois" que tout le monde mentionne ? Et pourquoi dit-on qu'en C++11 est apparue la "Règle de cinq" ? Je serais reconnaissant pour une explication détaillée.