Wie wir wissen , wenn Jeder Konstruktor wird deklariert (Kopierkonstruktor eingeschlossen). Der Standardkonstruktor (der keine Argumente annimmt) wird nicht implizit erstellt. Gilt das auch für einen Standardkopiekonstruktor (den, der eine flache Kopie eines Objekts ausführt)? Beeinflusst das Vorhandensein von Destruktoren das auch?
Die Antworten hier sind korrekt, aber nicht vollständig. Sie sind korrekt für C ++ 98 und C ++ 03. In C ++ 11 erhalten Sie keinen Kopierkonstruktor, wenn Sie einen Move-Konstruktor oder einen Move-Zuweisungsoperator deklariert haben. Wenn Sie einen Kopierzuweisungsoperator oder einen Destruktor deklariert haben, ist die implizite Generierung des Kopierkonstruktors veraltet. 12.8 [class.copy]:
Wenn die Klassendefinition dies nicht tut explizit einen Kopierkonstruktor deklarieren, Es gibt keine vom Benutzer deklarierte Bewegung Konstruktor, und es gibt keine Benutzer-deklarierte Bewegungszuweisung Operator, ein Kopierkonstruktor ist implizit als voreingestellt deklariert (8.4.2). Eine solche implizite Deklaration ist veraltet, wenn die Klasse a hat Vom Benutzer deklarierter Kopierzuweisungsoperator oder ein vom Benutzer deklarierter Destruktor.
Nein. Sie erhalten einen Standardkopiekonstruktor, wenn Sie keinen eigenen Kopierkonstruktor angeben und das Vorhandensein oder Fehlen eines Destruktors keinen Unterschied macht.
Nein. Und beachte das
%Vor%stellt keinen Kopierkonstruktor zur Verfügung, und es wird ein Standardkonstruktor generiert.
Tags und Links c++ copy-constructor default-constructor