Die übersichtlichste Methode zum Deaktivieren der Kopierklasse in C ++ 11

Ich habe ein Problem mit veralteten seit C ++ 11 Standard-Generierung von Kopierkonstruktor und Kopierzuweisungsoperator, wenn es einen benutzerdefinierten Destruktor gibt.

Für die meisten ausreichend einfachen Klassen sind standardmäßig generierte Konstruktoren, Operatoren und Destruktoren in Ordnung. Berücksichtigen Sie die folgenden Gründe, um den Destruktor zu deklarieren:

Trivial Destructor in der Basisklasse virtuell machen:

// header
class Base1 { public: virtual ~Base1() = default; };
class Base2 { public: virtual ~Base2(); };
// source
Base2::~Base2() = default;

Würden in diesen Fällen alle 4 Kopier- und Verschiebemethoden vom Compiler generiert? Wenn ja, dann denke ich, dass es in Ordnung ist und es keine Notwendigkeit gibt, sich zu komplizierenBase1 oderBase2.

Debug-Meldung im Destruktor ausgeben:

// header
class D { public: ~D(); };
// source
D::~D() {
#ifdef DEBUG_THIS
    std::cout << "D was destructed." << std::endl;
#endif
}

Ich glaube, dass in diesem Fall der Kopierkonstruktor und der Zuweisungsoperator generiert würden. aber Konstruktor und Zuweisungsoperator würden nicht verschieben. Ich möchte die Verwendung veralteter Standardgenerierung vermeiden und das Kopieren von deaktivierenD. Ich möchte auch Überschwemmungen vermeidenD mit 4deleted Erklärungen. Reicht es aus, nur einen Kopierkonstruktor zu deaktivieren? Ist es ein guter Stil?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage