Ich habe das gelesen, was erwähnt Destruktoren sind trivial und nicht trivial.
Eine Klasse hat einen nicht-trivialen Destruktor, wenn sie explizit einen hat definierter Destruktor, oder wenn er ein Member-Objekt oder eine Basisklasse hat, die hat einen nicht-trivialen Destruktor.
Im Beispiel habe ich eine Klasse,
%Vor% Wenn C::~C()
implizit definiert ist, wird daraus ein Trival-dtor?
Sie bringen Ihre Worte durcheinander. Ihr Beispiel deklariert tatsächlich einen expliziten Destruktor. Du vergisst einfach zu definieren es auch, damit du einen Linker-Fehler bekommst.
Die Regel ist sehr einfach: Hat Ihre Klasse einen expliziten Destruktor? Wenn ja, bist du nicht trivial. Wenn nein, überprüfen Sie jedes nicht statische Elementobjekt. Wenn sie nicht trivial sind, dann bist du nicht-trivial.
Also meinst du, die gesamte Deklaration von C
ist das:
?
Dann, ja: Da C
keine Member-Objekte und keine Basis-Klassen hat, hat es daher keine Member-Objekte mit nicht-trivialen Destruktoren und keine Basis-Klassen mit nicht-trivialen Destruktoren, so dass sein implizit definierter Destruktor ein Trivial ist eins.
Ich denke, es bezieht sich im Allgemeinen auf einen Destruktor, der tatsächlich etwas tut wie:
In diesem Fall tut der Destruktor nichts. Nach der Beschreibung, technisch kann es ‚nicht trivial‘ sein, weil es einen Konstruktor definiert, aber es spielt keine Rolle, da es ohnehin nichts tut.
Tags und Links c++ destructor