Inspiriert von dieser Frage .
Normalerweise ist der Grund dafür, den Kopierkonstruktor und den Zuweisungsoperator private
zu erstellen, , damit die Klasse nicht kopierbar gemacht werden kann dass Objekte nur erstellt und zerstört, aber nicht kopiert werden können - meistens, weil das Kopieren sinnlos wäre. In solchen Fällen werden der Kopierkonstruktor und der Zuweisungsoperator beide gemacht private
und nicht implementiert - wenn die Klasse nicht kopierbar ist, dann sollte niemand kopieren.
Gibt es einen Fall, in dem Kopierkonstruktor und Zuweisungsoperator private
sein müssen und gleichzeitig eine sinnvolle Implementierung haben?
Zwei Fälle fallen mir sofort ein:
friend
s:
Sagen Sie, dass Sie als Teil Ihres Designs zwei hoch gekoppelte Klassen haben, in denen man die anderen kopieren kann (etwa wie in einem Fabrikmodell oder Ähnlichem), aber Sie wollen das nicht lassen ganze Welt kann es kopieren.
Wrapper:
Nehmen wir an, Sie möchten ein Element je nach internem Verhalten (z. B. abhängig von einer Zustandsstatusbedingung) bedingt klonen können - der sauberste Weg aus der Sprachperspektive ist immer noch, das Kopieren in sein eigenes zu trennen Funktion. Dies würde eine gute Trennung der Interessen ermöglichen.
Ich schätze, dass dies für eine Klasse nützlich sein kann, die eine eigene Liste enthält - dann kann sie die Instanzen intern kopieren. Dies ist wirklich nur nützlich für eine Klasse, die sowohl das Element als auch den Container ist:
%Vor%Ein anderer Gedanke ist, das Klonen in einem von der Klasse kontrollierten Zustand zu erlauben. Dies kann nützlich sein, wenn das Kopieren sinnvoll sein kann, aber nur unter bestimmten Bedingungen oder Berechtigungen:
%Vor%operator =
nicht implementiert, so dass sogar
a friend
kann keinen Zugriff darauf haben. Wenn Sie implementieren, bedeutet es
Sie möchten, dass ein friend
Zugriff hat. Dies ist eine Designentscheidung. z.B.
%Vor% Wir haben diesen Wrapper clone()
hinzugefügt, um dem Benutzer das Klonen zu ermöglichen, aber er zeigt auch explizit an, was genau er tut.
Tags und Links c++ design copy-constructor assignment-operator