"Fast Standard" -Konstruktor (& Zuweisungsoperator) in C ++

8

Eine gewöhnliche Sache, die ich finde, macht "fast Standard" Kopierkonstruktoren und Zuweisungsoperatoren. Das heißt, ich befinde mich in Situationen, in denen der Compiler Kopier- und Zuweisungsoperatoren für die meisten Datenelemente verwenden würde, aber es gibt ein bestimmtes Datenelement, das anders behandelt werden muss. Dies bedeutet, dass ich explizit einen Kopierkonstruktor / Zuweisungsoperator erstellen muss, der explizit alle Datenelemente mit einfacher Kopiersemantik auflistet. Dies kann für Klassen, in denen es eine große Anzahl von Datenelementen gibt, oder später, wenn Membervariablen hinzugefügt werden, aber nicht zum Kopierkonstruktor / Zuweisungsoperator hinzugefügt werden, ärgerlich werden.

Gibt es eine Möglichkeit, dem C ++ - Compiler mitzuteilen, dass ein explizit deklarierter Kopierkonstruktor / Zuweisungsoperator wie ein impliziter Operator funktionieren sollte, mit Ausnahme von etwas zusätzlichem Code, der danach ausgeführt wird? (Und ist eine solche Syntax C ++ 98 kompatibel, oder benötigt sie C ++ 11 oder C ++ 14 Unterstützung?)

    
R.M. 11.07.2014, 23:38
quelle

1 Antwort

8

Wenn Sie die spezifische Behandlung in einem richtigen RAII-Wrapper isolieren können, wie Igor Tandetnik vorgeschlagen hat: gehen Sie dazu.

Wenn Sie eine bestimmte Verarbeitung im Kopierkonstruktor und / oder im Zuweisungsoperator benötigen (z. B. Registrieren der Objekterstellung / -zuweisung in einem Container oder Protokoll), können Sie die Datenelemente, die als Standardkopie erstellt / zugewiesen werden können, in a gruppieren separate Klasse, die Sie als Basisklasse oder Datenelement verwenden, die Sie als zusammengesetzt behandeln, also:

%Vor%

Wenn Sie später Datenelemente hinzufügen, die keine spezifische Behandlung erfordern, können Sie sie einfach zu x_base hinzufügen.

    
Maarten Hilferink 12.07.2014 00:22
quelle