Destruktor-FRage



  • #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 = 12;
        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"; 
    
        fflush(stdin); cin.peek();
        return 0;
    }
    

    Wie rufen sich Konstruktor und Destruktor in diesem Programm auf???
    Sie werden ja in main() nicht angerührt, oder doch??



  • Ania87 schrieb:

    int main()
    {
        Test x(7);// ctor
        Test y;   // ctor mit i=9
        Test z(13);// ctor
        cout << " " << x.ausgabe() << "\n";        
        cout << " " << y.ausgabe() << "\n"; 
        cout << " " << z.ausgabe() << "\n"; 
        
        fflush(stdin); cin.peek();
        return 0;//dtor bei verlassen des gültigkeitsbereiches der "Test"s. also
    //beim verlassen der main
    }
    

    Wie rufen sich Konstruktor und Destruktor in diesem Programm auf???
    Sie werden ja in main() nicht angerührt, oder doch??



  • Hallo,

    durch das Erzeugen eines Objekts wird dessen Konstruktor aufgerufen:

    Test x(7); // mit dem Wert 7
        Test y; // mit dem Wert 9, da Defaultparameter
        Test z(13); // mit dem Wert 13
    

    Bei der Zerstörung wird der Destruktor aufgerufen. Zerstört wird dein Objekt, nach der letzten }.



  • Ok danke und wozu soll das jetzt gut sein??





  • Hallo

    der Konstruktor ist (u.a.) dazu da, die Membervaribalen der Klasse zu initialiseren.
    Der Destruktor ist (u.a.) dazu du, mit new erzeugten, logisch zu der Klasse zu gehörenden Speicher freizugeben.
    In deinem Minimalen Beispiel ist kein Destruktor nötig.

    bis bald
    akari


Anmelden zum Antworten