Destruktor von eingebauten Typen aufrufen
-
Hi,
ich will den Destruktor von den eingebauten Typen aufrufen. Wie geht das?int i; i.~int();
so funzt es nich
-
Eingebaute Typen haben keine Destruktoren.
-
Hi,
wenn du willst, dass die Variable vorzeitig zerstoert wird, musst du einen
neuen Block oeffnen:{ //neuen block oeffnen int i; //tue was mit i } //block schliessen, i existiert jetzt nicht mehr
mfg
v R
-
oder delete &i;
-
Er wollte i zerstören, nicht das Programm
-
Anonymous schrieb:
oder delete &i;
Klar, wenden wir doch delete einfach auf alles an, was wir grad wollen und
sei es ne Variable vom Typ int, float, double etc.mfg
v R
-
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 ...