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
No answers yet.
Connectez-vous pour laisser une réponse