Freigeben über


Spezielle Memberfunktionen

Die speziellen Memberfunktionen sind Klassen- (oder Struktur)-Memberfunktionen , die der Compiler in bestimmten Fällen automatisch für Sie generiert. Diese Funktionen sind der Standardkonstruktor, der Destruktor, der Kopierkonstruktor und der Zuweisungsoperator zum Kopieren sowie der Konstruktor und der Verschiebungszuweisungsoperator. Wenn ihre Klasse eine oder mehrere der speziellen Memberfunktionen nicht definiert, kann der Compiler die verwendeten Funktionen implizit deklarieren und definieren. Die compilergenerierten Implementierungen werden als standardspezifische Memberfunktionen bezeichnet. Der Compiler generiert keine Funktionen, wenn sie nicht benötigt werden.

Sie können eine standardmäßige spezielle Memberfunktion explizit deklarieren, indem Sie die Standard-Schlüsselwort (keyword) verwenden. Dies bewirkt, dass der Compiler die Funktion nur bei Bedarf definiert, genauso wie wenn die Funktion überhaupt nicht deklariert wurde.

In einigen Fällen generiert der Compiler möglicherweise gelöschte spezielle Memberfunktionen, die nicht definiert sind und daher nicht aufgerufen werden können. Dies kann in Fällen auftreten, in denen ein Aufruf einer bestimmten speziellen Memberfunktion für eine Klasse aufgrund anderer Eigenschaften der Klasse nicht sinnvoll ist. Um die automatische Generierung einer speziellen Memberfunktion explizit zu verhindern, können Sie sie mithilfe des =delete-Schlüsselwort (keyword) als gelöscht deklarieren.

Der Compiler generiert einen Standardkonstruktor, einen Konstruktor, der keine Argumente akzeptiert, nur wenn Sie keinen anderen Konstruktor deklariert haben. Wenn Sie nur einen Konstruktor deklariert haben, der Parameter akzeptiert, führt Code, der versucht, einen Standardkonstruktor aufzurufen, dazu, dass der Compiler eine Fehlermeldung erzeugt. Der vom Compiler generierte Standardkonstruktor führt einfache elementbasierte Standardinitialisierung des Objekts durch. Die Standardinitialisierung hinterlässt alle Membervariablen in einem unbestimmten Zustand.

Der Standarddestruktor führt eine memberweise Zerstörung des Objekts durch. Es ist nur virtuell, wenn ein Basisklassen-Destruktor virtuell ist.

Die standardmäßigen Vorgänge zum Kopieren und Verschieben von Konstruktionen und Zuordnungen führen Member-wise-Bit-Musterkopien oder Verschiebungen von nicht statischen Datenmembern durch. Verschiebungsvorgänge werden nur generiert, wenn keine Destruktor- oder Verschiebungs- oder Kopiervorgänge deklariert werden. Ein Standardkopiekonstruktor wird nur generiert, wenn kein Kopierkonstruktor deklariert wird. Sie wird implizit gelöscht, wenn ein Verschiebungsvorgang deklariert wird. Ein Standardmäßiger Kopierzuweisungsoperator wird nur generiert, wenn kein Kopierzuweisungsoperator explizit deklariert wird. Sie wird implizit gelöscht, wenn ein Verschiebungsvorgang deklariert wird.

Siehe auch

C++-Programmiersprachenreferenz