Avatar ·

Was ist die 'Dreierregel' in C++ und warum gibt es ohne sie Speicherlecks?

Hallo zusammen! Ich habe angefangen, C++ zu lernen, und bin auf ein Problem gestoßen. Ich schreibe eine einfache Klasse, die einen String über dynamischen Speicher speichert. Es scheint alles logisch, aber das Programm stürzt ab oder verhält sich seltsam. Hier ist mein 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; // Copy String s3("World"); s3 = s1; // Assignment return 0; } ``` Nach dem Ausführen stürzt das Programm mit einem double free error ab. Ich verstehe, dass das Problem darin liegt, dass beim Kopieren beide Objekte auf denselben Speicher zeigen und dann beide versuchen, ihn freizugeben. Aber wie behebe ich das richtig? Was ist die 'Dreierregel', die alle erwähnen? Und warum sagt man, dass in C++11 die 'Fünferregel' hinzugekommen ist? Ich wäre für eine ausführliche Erklärung dankbar.