Konstruktor~Destruktor
-
Hallo liebe C++ Experten,
Ich habe hier ein einfaches c++ Programm:#include<iostream> using namespace std; class test{ private: int abc; public: test(int i=9); //Konstruktor ~test(); //Destruktor int ausgabe() {return abc;} }; test::test(int i) { //Konstruktor cout<<"Konstruktor\n"; if (i>12) abc=i; else abc=i; } test::~test(){ //Destruktor cout<<"Destruktor\n"; }; int main() { test x(7); test y; test z(13); cout<<" "<<x.ausgabe()<<"\n"; cout<<" "<<y.ausgabe()<<"\n"; cout<<" "<<z.ausgabe()<<"\n"; return 0; }:
unter Linux kommt einwandfrei:Konstruktor Konstruktor Konstruktor 7 9 13 Destruktor Destruktor Destruktorunter Windows bekomme Ich bei demselben Programm unter Dev++ leider nur:
Konstruktor Konstruktor Konstruktor 7 9 13???
Warum fehlt der Destruktordurchlauf, hat jemand eine Idee ?
-
Fehlt der Aufruf oder nur die Ausgabe?
- versuche es mit cerr statt cout
- benutze einen Debugger
-
vs 2013 (v120), ctp nov 2013, icc xe 14:
Konstruktor Konstruktor Konstruktor 7 9 13 Destruktor Destruktor Destruktor...
-
wenn Ich in Zeile 21 cerr statt cout eingebe geht es auch nicht ..? Aber es kommen keine Fehlermeldungen, deshalb glaube Ich, dass der Aufruf funktioniert ?
-
Hi versuch es mal mit
#include<iostream> using namespace std; class test{ private: int abc; public: test(int i=9); //Konstruktor ~test(); //Destruktor int ausgabe() {return abc;} }; test::test(int i) { //Konstruktor cout<<"Konstruktor\n"; if (i>12) abc=i; else abc=i; } test::~test(){ //Destruktor cout<<"Destruktor\n"; }; void testfunc() { test x(7); test y; test z(13); cout<<" "<<x.ausgabe()<<"\n"; cout<<" "<<y.ausgabe()<<"\n"; cout<<" "<<z.ausgabe()<<"\n"; } int main() { testfunc(); return 0; }ich glaube die Ausgabe wird nicht mehr richtig über cout und cerr ausgegeben nach dem Programmende. Vieleicht muss man sie auch einfach nur flushen oder so?
Gruß, Daniel_S
-
jetzt geht es auch in cpp super! danke!
-
Daniel_S schrieb:
ich glaube die Ausgabe wird nicht mehr richtig über cout und cerr ausgegeben nach dem Programmende.
Nene:
ISO/IEC 14882:2011 (N3777) schrieb:
§ 3.7.3.3
If a variable with automatic storage duration has initialization or a destructor with side effects, it shall not be destroyed before the end of its block, nor shall it be eliminated as an optimization even if it appears to be unused, except that a class object or its copy/move may be eliminated as specified in 12.8.//edith: Darf doch nicht sein, oder?
-
ISO/IEC 14882:2011 (N3777)
N3337 reicht.
Darf doch nicht sein, oder?
Was genau darf nicht sein? Das Zitat ist selbstverständlich. Vergiss aber nicht as-if. Solange keine beobachtbaren Seiteneffekte verändert werden kann die Implementierung optimieren wie sie lustig ist.
-
Wie waere es, wenn du deinen Code erstmal formatierst. Kann (/will) ja niemand lesen so.
-
Hier hat jemand das selbe Problem http://stackoverflow.com/questions/6494278/destructor-does-not-work
Hast du dein Programm (die erste Version) mal aus der Konsole gestartet wie im Link beschrieben, oder nur so per Doppelklick?
-
Arcoth schrieb:
ISO/IEC 14882:2011 (N3777)
N3337 reicht.
Sag mir bitte nicht, was ich schreiben darf und was nicht ...
Arcoth schrieb:
Darf doch nicht sein, oder?
Was genau darf nicht sein? [...] Vergiss aber nicht as-if. [...]
Das, was der TO beschreibt. Das ist nicht as-if. Aber wahrscheinlich hat er einfach nur die Testumstände ungenau beschrieben.
-
Arcoth schrieb:
ISO/IEC 14882:2011 (N3777)
N3337 reicht.
Aber mit der Lang-Version kann ein Einsteiger doch echt besser selber danach googeln. Sehr fein von Swordfish, die manchmal auch zu nennen.

-
volkard schrieb:
Arcoth schrieb:
ISO/IEC 14882:2011 (N3777)
N3337 reicht.
Aber mit der Lang-Version kann ein Einsteiger doch echt besser selber danach googeln.
N3337 reicht

Swordfish schrieb:
Arcoth schrieb:
ISO/IEC 14882:2011 (N3777)
N3337 reicht.
Sag mir bitte nicht, was ich schreiben darf und was nicht ...
Er hat doch nur geschrieben dass N3337 reicht. Ist doch kein "Verbot" es auszuschreiben.
-
Das, was der TO beschreibt.
Achso, ich dachte du meinst das Zitat.
