Ruft der explizite Destruktor hier Undefined Behaviour auf?

Meiner Meinung nach sollte der folgende Code (aus einer C ++ - Frage) zu UB führen, aber das scheint es nicht zu sein. Hier ist der Code:

#include <iostream>
using namespace std;
class some{ public: ~some() { cout<<"some's destructor"<<endl; } };
int main() { some s; s.~some(); }

und die Antwort ist:

some's destructor
some's destructor

Ich habe von c ++ faq lite gelernt, dass wir Destruktor nicht explizit aufrufen sollten. Ich denke, nach dem expliziten Aufruf an den Entwickler sollten die Objekte gelöscht werden. Das Programm ruft den Destruktor automatisch wieder auf, wenn er fertig ist. Es sollte UB sein. Ich habe es jedoch mit g ++ versucht und erhalte das gleiche Ergebnis wie die obige Antwort.

Ist es, weil die Klasse zu einfach ist (kein Neu / Löschen)? Oder ist es in diesem Fall gar nicht UB?

Antworten auf die Frage(18)

Ihre Antwort auf die Frage