Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Kiedy uruchamia się destruktor

Ostatnio zmodyfikowano 2015-10-18 15:50
Autor Wiadomość
ast44
Temat założony przez niniejszego użytkownika
Kiedy uruchamia się destruktor
» 2015-10-15 16:27:05
Mam takie nieoczywiste dla mnie pytanie, kiedy właściwie uruchamia się destruktor.Konstruktor przy inicjalizacji i to widać w kodzie.Natomiast nie bardzo widzę jak jest z destruktorem (zwłaszcza że klasa nie musi go posiadać i on sam jej nie usuwa tylko jest wywoływany przy usuwaniu instancji).Zrobiłem sobie jakąś klasę i w jej destruktorze powiedziałem żeby coś tam wypisywał.Stworzyłem np: dwa obiekty i odpaliłem kod.Widzę że destruktory tych obiektów wywołują się na samym końcu.Potem stworzyłem jakąś funkcję i ją wywołałem.I tak samo widać że destruktory wywołują się na samym końcu.Więc czy to jest zasada, że destruktory zawsze (o ile ich samodzielnie w jakiś sposób nie wywołamy) wywołują się na samym końcu ,już po wykonaniu się wszystkiego ?
P-138603
C-Objective
» 2015-10-15 16:42:14
C/C++
class klasa {
    klasa() {
        printf( "uruchomiono konstruktorek" );
    }
    ~klasa() {
        printf( "uruchomiono destruktorek" );
    }
}
main() {
    klasa * test = new klasa(); /*Uruchomienie konstruktora*/
    delete test; /*Uruchomienie destruktora*/
    return 0;
}
P-138607
mateczek
» 2015-10-15 16:48:15
C/C++
#include<iostream>
using namespace std;
class klasa {
public:
    klasa() {
        cout << "uruchomiono konstruktor" << endl;
    }
    ~klasa() {
        cout << "uruchomiono destruktor" << endl;
    }
};
int main() {
    klasa * test = new klasa(); /*Uruchomienie konstruktora*/
    cout << "1" << endl;
    delete test; /*Uruchomienie destruktora*/
    cout << "2" << endl;
    {
        cout << "3" << endl;
        klasa test2;
    } // innymi słowy gdy zmienna jest niszczona lub wychodzi poza zasięg działania
    cout << "4" << endl;
}


uruchomiono konstruktor
1
uruchomiono destruktor
2
3
uruchomiono konstruktor
uruchomiono destruktor
4


więc nie wiem czy to będzie odpowiedź w 100% przypadków prawdziwa ale destruktor jest odpalany na końcu klamry "}" lub gdy wywołamy go ręcznie!!! np za pomocą operatora delete.
P-138608
C-Objective
» 2015-10-18 15:50:56
Tzn. w tedy kiedy jest niszczony.
P-138782
« 1 »
  Strona 1 z 1