Was ist die 'Dreierregel' in C++ und warum führt ihre Verletzung zu Speicherlecks?
Hallo! Ich habe angefangen, C++ zu lernen, und bin auf einen unverständlichen Fehler gestoßen. Ich habe eine Klasse `SimpleString`, die einen dynamischen String speichert. Ich habe einen Konstruktor und einen Destruktor geschrieben, aber wenn ich versuche, ein Objekt zu kopieren oder ein Objekt einem anderen zuzuweisen, stürzt das Programm ab oder gibt Müll aus. Hier ist ein Beispielcode:
```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; // Copy
SimpleString c("World");
c = a; // Assignment
return 0;
}
```
Das Programm stürzt mit einem double free Fehler ab oder gibt verzerrte Strings aus. Ich verstehe, dass das Problem darin liegt, dass nach dem Kopieren zwei Objekte auf denselben
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen
Blogs