Der Pseudodestruktoraufruf zerstört kein Objekt

8

Betrachten Sie den folgenden Code:

%Vor%

Ich erwarte, dass a zerstört wird. Aber es ist nicht wahr, warum? Wie wird dieser Pseudo-Destruktor Aufruf das Objekt zerstört?

    
Columbo 02.06.2014, 18:09
quelle

1 Antwort

21
  

Aber es ist nicht wahr, warum?

§5.2.4 / 1:

  

Der einzige Effekt ist die Auswertung des Postfix-Ausdrucks vor dem Punkt oder Pfeil.

Wo der Postfix-Ausdruck der Ausdruck des Objekts ist, für das der Aufruf stattfindet. Daher beendet ein Pseudo-Destruktoraufruf als Aufruf eines trivialen Destruktors nicht die Lebensdauer des Objekts, auf das er angewendet wird. Zum Beispiel,

%Vor%

Sie können einen Destruktor eigentlich nicht für Skalare aufrufen, weil sie keinen haben (siehe [class.dtor]). Die Anweisung ist nur für Vorlagencode zulässig, in dem Sie den Destruktor eines Objekts aufrufen, dessen Typ Sie nicht kennen - es entfällt die Notwendigkeit, eine Spezialisierung für Skalartypen zu schreiben.

In den Kommentaren wurde angemerkt, dass [expr.pseudo] die Existenz eines Destruktors für Skalare durch

impliziert
  

Die Verwendung eines Pseudo-Destruktor-Namens nach einem Punkt . oder Pfeil -> Operator   stellt den Destruktor für den Nicht-Klassen-Typ mit dem Namen typname dar.

Dies ist jedoch nicht mit anderen Teilen des Standards, z.B. §12, der einen Destruktor eine spezielle Memberfunktion aufruft und erwähnt, dass

  

Ein Destruktor wird verwendet, um Objekte seines Klassentyps zu zerstören.

Es scheint eine Ungenauigkeit zu sein, die in C ++ 98 Tagen erstellt wurde.

    
Columbo 02.06.2014, 18:11
quelle

Tags und Links