2017-06-14 1 views
4

Was ist der Unterschied zwischen explizit deklariert Klassen Sonderfunktionen Standard.Warum deklarieren Klassen explizit Sonderfunktionen als "Standard"

class Myclass 
{ 
public: 

    Myclass() = default; 
    virtual ~Myclass() = default; 

    Myclass(MyClass&&) = default; 
    Myclass& operator=(MyClass&&) = default; 

    Myclass(const MyClass&) = default; 
    Myclass& operator=(const MyClass&) = default; 
}; 

MyClass{}; 

Was ist der Unterschied zwischen diesen 2 Deklarationen? Warum explizit die Standardverhaltensfunktionen als Standard angeben?

+0

Die 'class MyClass {};' Version hat keinen virtuellen Destruktor. – sp2danny

+0

'Was ist der Unterschied zwischen diesen 2 Deklarationen?' Was 2 Deklarationen? Sie scheinen nur eine Deklaration jeder speziellen Mitgliedsfunktion enthalten zu haben. –

Antwort

8

Da der Compiler unter bestimmten Bedingungen die Konstruktoren, Destruktoren oder Operatoren nicht hinzufügen kann, obwohl Sie die vom Compiler generierten Standardwerte verwenden möchten. Mit dem expliziten default Bezeichner wird der Compiler das trotzdem tun.

Sie können mehr in z.B. this class reference.

+3

auch manchmal explizite kann Klarheit hinzufügen, Sie signalisieren, dass der Standard erzeugt wurde eher durch Wahl als durch Fehler. –

Verwandte Themen