Erstellen eines einfach zu pflegenden Kopierkonstruktors

Betrachten Sie die folgende Klasse:

class A {

char *p;
int a, b, c, d;

public:
   A(const &A);
};

Hinweis, dass ich einen Kopierkonstruktor definieren muss, um eine tiefe Kopie von "p" zu erstellen. Dies hat zwei Probleme:

Die meisten Felder sollten einfach kopiert werden. Das Kopieren nacheinander ist hässlich und fehleranfällig.

Wichtiger ist, dass der Kopierkonstruktor jedes Mal, wenn der Klasse ein neues Attribut hinzugefügt wird, aktualisiert werden muss, wodurch ein Wartungs-Alptraum entsteht.

Ich persönlich würde gerne etwas machen wie:

A(const A &a) : A(a)
{
   // do deep copy of p
   :::
}

So wird zuerst der Standard-Kopierkonstruktor aufgerufen und dann das Deep Copy ausgeführt.
Leider scheint dies nicht zu funktionieren.

ibt es einen besseren Weg, dies zu tun? Eine Einschränkung: Ich kann keine geteilten / intelligenten Zeiger verwenden.

Sbi Vorschläge machen sehr viel Sinn. Ich denke, ich werde Wrapper-Klassen für den Umgang mit der Ressource erstellen. Ich möchte nicht shared_ptr verwenden, da die Boost-Bibliotheken möglicherweise nicht auf allen Plattformen verfügbar sind (zumindest nicht in Standarddistributionen, OpenSolaris ist ein Beispiel).

Ich denke immer noch, es wäre großartig gewesen, wenn Sie den Compiler irgendwie dazu bringen könnten, die Standard-Konstruktor- / Zuweisungsoperatoren für Sie zu erstellen, und Sie könnten einfach Ihre Funktionalität hinzufügen. Die manuell erstellten Kopierkonstruktor- / Zuweisungsoperatorfunktionen werden meiner Meinung nach mühsam zu erstellen und ein Alptraum zu warten sein. Meine persönliche Faustregel wäre es also, benutzerdefinierte Kopierkonstruktoren / Zuweisungsoperatoren um jeden Preis zu vermeiden.

Danke an alle für ihre Antworten und hilfreichen Informationen und entschuldigen Sie Tippfehler in meiner Frage. Ich habe es von meinem Telefon aus eingegeben.

Antworten auf die Frage(18)

Ihre Antwort auf die Frage