Destruktor von eingebauten Typen aufrufen



  • Eingebaute Typen haben keine Destruktoren.

    Richtig. Allerdings ist die Destruktor-Aufruf-Syntax für primitive Typen erlaubt, sofern sie aus der Instanziierung eines Templates resultiert:

    template <class T>
    void destruct(T& i)
    {
        i.~T();
    }
    int main()
    {
    int i;
    destruct(i);
    }
    

    Ein Destruktor wird hier freilich aber nicht aufgerufen.



  • Ein Destruktor wird hier freilich aber nicht aufgerufen.

    Wird das vom Compiler wegoptimiert, oder in diesem Fall einfach ignoriert?

    mfg
    v R



  • Wird das vom Compiler wegoptimiert, oder in diesem Fall einfach ignoriert?

    Es passiert schlicht und einfach nichts. Und für dieses nichts wird auch kein Code generiert 🙂

    Allerdings ist die Destruktor-Aufruf-Syntax für primitive Typen erlaubt, sofern sie aus der Instanziierung eines Templates resultiert:

    Es muss nicht mal aus der Instanziierung eines Templates resultieren.
    Geht auch so:

    typedef int I;
    I i; 
    i.I::~I();
    


  • HumeSikkins schrieb:

    Es muss nicht mal aus der Instanziierung eines Templates resultieren.
    Geht auch so:

    typedef int I;
    I i; 
    i.I::~I();
    

    typedef geht, aber #define geht nicht.
    daraus läßt sich ne prima klausuraufgabe basteln.



  • Erlaubt mir diese etwas naivie Frage: Hat das irgendeinen Sinn so was
    zu machen ???



  • Taurin schrieb:

    Erlaubt mir diese etwas naivie Frage: Hat das irgendeinen Sinn so was
    zu machen ???

    zB:
    du hast ne template klasse in der du speicher per placement new anlegst.
    dann musst du natuerlich den dtor selber aufrufen -> also muss es auch fuer eingebaute typen erlaubt sein.



  • Hat das irgendeinen Sinn so was
    zu machen ???

    Es macht eigentlich nur Sinn in Template-Code (gesehen habe ich es z.B. als letztes in einem speziellen Memory-Allokator). Man muss dann nicht extra zwischen benutzerdefinierten und skalaren Typen unterscheiden.



  • C++ hat schon was Irres. 😃



  • Anonymous schrieb:

    Hi,
    ich will den Destruktor von den eingebauten Typen aufrufen. Wie geht das?

    int i;
    i.~int();
    

    so funzt es nich 😞

    Das "~" Zeichen ist ja auch reserviert und "int" besitzt keine Funktionen auf die du mit "." zugreifen könntest! du solltest dich besser erstmal mit den Grundlagen beschäftigen.



  • Es ist leider nur halb so lustig wenn du unregistriert postest, also tu uns doch den Gefallen ...


Anmelden zum Antworten