Konstruktor~Destruktor



  • 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?


  • Mod

    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.


  • Mod

    Das, was der TO beschreibt.

    Achso, ich dachte du meinst das Zitat. 🙂


Anmelden zum Antworten