Ich möchte den Anwender meiner Klasse verhindern, dass sie als eine automatische Variable, also schreibe ich Code wie folgt:Was ist der Unterschied zwischen "= Standard" Destruktor und leerer Destruktor?
class A {
private:
~A() = default;
};
int main() {
A a;
}
Ich gehe davon aus, dass der Code nicht kompiliert werden, sondern g ++ kompiliert ohne Fehler .
Allerdings, wenn ich den Code zu ändern:
class A {
private:
~A(){}
};
int main() {
A a;
}
Nun g ++ gibt den Fehler, dass ~A()
privat ist, wie meine Erwartung.
Was ist der Unterschied zwischen einem "= Standard" Destruktor und einem leeren Destruktor?
Welche Version von gcc? –
Lesen z.B. [Dieser Destruktor-Verweis] (http://en.cppreference.com/w/cpp/language/destructor), der Unterschied besteht darin, dass ein vom Benutzer bereitgestellter Destruktor (auch wenn er leer ist) * nicht-trivial * ist und von der Referenz: "Objekte mit trivialen Destruktoren benötigen keinen Löschausdruck und können durch einfaches Entfernen ihres Speichers entsorgt werden." –
In Ihrem Fall gibt es keinen Unterschied, sowohl [gcc4.9 als auch clang3.5 weigern sich zu kompilieren] (http://coliru.stacked-crooked.com/a/41976bc03bc12c79) Ihr erstes Beispiel. Es muss ein Fehler in Ihrer Version von gcc sein. – Praetorian