Destruktor Aufrufe auf eingebaute Typen und Zeiger



  • Ich arbeite gerade mit Templates und placement new und habe einen Destruktor Aufruf T.~T(). Wenn T jetzt int wäre käme dabei ja folgendes raus int.~int(), diesen Asdruck schmettert der Compiler ab. Was passiert jetzt genau mit T.~T() wird der Ausdruck verworfen wenn T ein eingebauter Typ oder Zeiger ist oder sind lediglich direkte Destruktor aufrufe auf eingebaute Typen und Zeiger nicht erlaubt weil sie ohnehin sinnfrei wären?



  • Xebov schrieb:

    Ich arbeite gerade mit Templates und placement new und habe einen Destruktor Aufruf T.~T(). Wenn T jetzt int wäre käme dabei ja folgendes raus int.~int(),

    Das ergibt alles keinen Sinn. Du brauchst schon ein Objekt, dessen Destruktor aufgerufen werden soll. Also zB so: zeiger->~T(); oder referenz.~T(); wobei zeiger bzw referenz ein Objekt vom Typ T referenzieren.

    Auch wenn Du für T int einsetzt, geht das in Ordnung -- dann passiert halt nichts.



  • Das hat er ja sicher gemeint. Das hier compiliert eben:

    Vector* blubb;
    blubb->~Vector();
    

    Und das nicht:

    int* lalala;
    lalala->~int();
    

    Als templatisiertes t->~T() wiederum doch. Sieht also schon verdächtig nach template-magic aus. Ich finde die Frage schon interessant.


  • Mod

    Optimizer schrieb:

    Als templatisiertes t->~T() wiederum doch. Sieht also schon verdächtig nach template-magic aus. Ich finde die Frage schon interessant.

    Das hat nichts mit Templates zu tun, allerdings der Pseudodestruktoraufruf einen Typnamen.

    typedef int int_t;
    int* lalala;
    lalala->~int_t();
    

Anmelden zum Antworten