Avatar ·

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