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.
-
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();