Was ist ein nicht-trivialer Destruktor in C ++?

8

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?

    
cpx 19.11.2011, 00:32
quelle

3 Antworten

16

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.

    
Kerrek SB 19.11.2011, 00:52
quelle
4

Also meinst du, die gesamte Deklaration von C ist das:

%Vor%

?

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.

    
ruakh 19.11.2011 00:39
quelle
0

Ich denke, es bezieht sich im Allgemeinen auf einen Destruktor, der tatsächlich etwas tut wie:

  • Speicher freigeben
  • Schließen Sie eine Verbindung zur Datenbank
  • Oder kümmern Sie sich um alle Ressourcen, die freigegeben werden müssen

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.

    
TJB 19.11.2011 00:50
quelle

Tags und Links