Nehmen wir an, ich möchte einen Typ erstellen, der nicht konstruiert werden kann (frag nicht warum).
%Vor%Ich könnte es so machen:
%Vor%oder wie folgt:
%Vor%oder wie folgt:
%Vor%Ich denke, ich könnte dasselbe über jede Funktion stellen, nicht nur Konstruktoren.
Macht es einen Unterschied, welchen ich wähle? In Bezug auf Syntax denke ich, dass ich die zweite Option mag. Aber gibt es irgendeine Situation, in der es möglich ist, einen Unterschied zu erkennen (anders als im Text einer Fehlermeldung)?
Es gibt einen Unterschied, zum Beispiel:
%Vor%Obwohl Sie dieses Objekt niemals konstruieren können, können Sie in der Praxis niemals eine Kopie erstellen, je nach Sprache und Typeigenschaften in der Bibliothek, technisch ist es CopyConstructible, weil es einen implizit deklarierten Kopierkonstruktor gibt / p>
In ähnlicher Weise gibt es mit den Formularen Impossible(...)
oder Impossible(Ts&&...)
immer noch einen implizit deklarierten Kopierkonstruktor.
Auf der anderen Seite, wenn Sie es so machen:
%Vor%Die Existenz eines vom Benutzer deklarierten Konstruktors unterdrückt die implizite Deklaration des Standardkonstruktors, daher ist die Klasse weder DefaultConstructile noch CopyConstructible.
N.B. Ihr letztes Beispiel sollte wahrscheinlich Impossible(Ts&&...)
sein, um irgendwelche Typen zu entsprechen, einschließlich nicht kopierbare und nicht bewegliche.
Der erste ist mehr als genug - es werden keine Konstruktoren vom Compiler generiert und am wichtigsten ist es idiomatisch .
Sie können keine Instanz dieser Klasse erstellen:
%Vor%Beachten Sie, dass die Frage von copy-constructor (oder move-constructor) gar nicht erst auftaucht, so dass sie nicht mehr gelöscht werden müssen. Ein Objekt kann nicht existieren, weil es nicht konstruiert werden kann , so dass das Kopieren oder Verschieben nicht in Frage kommt.
Tags und Links c++ c++11 memory-management delete-operator