Wann ist ein benutzerdefinierter Kopierkonstruktor erforderlich?
Der C-Compiler generiert automatisch einen Kopierkonstruktor für Klassen, der mitgliederweise arbeitet Kopieren standardmäßig. In bestimmten Situationen müssen wir jedoch möglicherweise unseren eigenen benutzerdefinierten Kopierkonstruktor definieren.
Gründe für die Definition eines benutzerdefinierten Kopierkonstruktors:
Beispiele:
Betrachten Sie die folgende Klasse, die eine Zeichenfolge speichert:
<code class="cpp">class Class { public: Class(const char* str); ~Class(); private: char* stored; };</code>
Mit dem Standard-Kopierkonstruktor würde das gespeicherte Mitglied nur per Referenz kopiert, was zu undefiniertem Verhalten führt, wenn eine der Kopien vorhanden ist zerstört. Um dies zu verhindern, definieren wir einen benutzerdefinierten Kopierkonstruktor, der tiefes Kopieren durchführt:
<code class="cpp">Class::Class(const Class& another) { stored = new char[strlen(another.stored) + 1]; strcpy(stored, another.stored); }</code>
Darüber hinaus ist auch ein benutzerdefinierter Kopierkonstruktor erforderlich, damit der Zuweisungsoperator tiefes Kopieren korrekt durchführen kann:
<code class="cpp">void Class::operator = (const Class& another) { char* temp = new char[strlen(another.stored) + 1]; strcpy(temp, another.stored); delete[] stored; stored = temp; }</code>
Das obige ist der detaillierte Inhalt vonWann sollten Sie einen benutzerdefinierten Kopierkonstruktor in C implementieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!