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 ...