Tablica obiektów, usuwające się obiekty.

Tablica obiektów, usuwające się obiekty.
CG
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:76
0

Hej, mam drobne pytanie. Być może banalne. Proszę o nakierowanie.
W pewnej klasie o nazwie Klasa_zbiorcza (w jej konstruktorze) tworzę sobie tablicę obiektów:

Kopiuj
Klasa_zbiorcza::Klasa_zbiorcza  (int liczba_objektow)
{
    cout<<("przed construktorem tablicy Obiektow")<<endl;
    klasa_zbiorcza = new Objekt [liczba_objektow];
    cout<<("za construktorem tablicy Obiektow")<<endl;
}

w pliku .h mam oczywiście:

Kopiuj
class Klasa_zbiorcza
{
    Objekt *klasa_zbiorcza; 

public:

    void wyswietl_Klase_zbiorcza();
    // constructor
    Klasa_zbiorcza();
     // destructor
    ~Klasa_zbiorcza();
};

Każdy z Obiektów w sobie również tworzy pewien obiekt. Nazwijmy go Objekt_2.

Kopiuj
Objekt::Objekt()
{
    Objekt_2 objekt_2_1;
}

main:

Kopiuj
cout << "Hello world!" << endl;
    Klasa_zbiorcza  klasa_zbiorcza_1(5);

    cout<<("stworzylem tablice Obiektów")<<endl;

    klasa_zbiorcza.wyswietl_Objekty();

    cout<<"Koncze program"<<endl;

I teraz pytanie:
Dlaczego po stworzeniu tablicy Obiektów wywołuje się destruktor Obiektów_2 ?
Wydawało mi się, że kolejno każdy Obiekt_2 zostanie usunięty przed samym usunięciem każdego z Obiektów.
Nie ma tu dziedziczenia. Jest swego rodzaju incepcja :D. Tablica klasa zbiorcza ma w sobie 5 Obiektów. Każdy z Obiektów ma w sobie po jednym Obiekt_2.

Konsola:

Kopiuj
Hello world!
przed construktorem tablicy Objektow  (tych bez "2")
Usuwam Objekt_2
Usuwam Objekt_2
Usuwam Objekt_2
Usuwam Objekt_2
Usuwam Objekt_2
za construktorem tablicy Objektow (tych bez "2")
stworzylem tablice Obiektów

Objekt0] x =1
Objekt[1] x=1
Objekt[2] x =1
Objekt[3] x =1
Objekt[4] x =1
Koncze program
Usuwam Obiekt
Usuwam Obiekt
Usuwam Obiekt
Usuwam Obiekt
Usuwam Obiekt

Starałem się umieścić najważniejsze fragmenty kodu. Mam nadzieję że coś widać :D

Pozdrowionka!

edytowany 3x, ostatnio: CzakuGim
grzesiek51114
grzesiek51114
  • Rejestracja:ponad 11 lat
  • Ostatnio:ponad 4 lata
  • Postów:2442
2

Bo Objekt_2 objekt_2_1; istnieje tylko w zakresie konstruktora klasy Objekt i jest automatycznie niszczony po wyjściu z funkcji. Tak więc po zakończeniu wywołania konstruktora Objekt obiektu klasy Objekt_2 już nie będzie.

edytowany 2x, ostatnio: grzesiek51114
vpiotr
  • Rejestracja:prawie 14 lat
  • Ostatnio:około 3 lata
1

Nie podałeś pełnego kodu więc trudno powiedzieć co Ci się tam wywołuje.
A ta deklaracja nadaje się do oznaczenia tagiem #wtf:

Kopiuj
class Klasa_zbiorcza
{
    Objekt *klasa_zbiorcza; 

CG
  • Rejestracja:prawie 7 lat
  • Ostatnio:ponad 3 lata
  • Postów:76
0

Nie podałeś pełnego kodu więc trudno powiedzieć co Ci się tam wywołuje.
A ta deklaracja nadaje się do oznaczenia tagiem #wtf:>

Haha, no rzeczywiście, w kodzie mam ok, tu tak przepisywałem "najwazniejsze fragmenty" i masz :D

Bo Objekt_2 objekt_2_1; istnieje tylko w zakresie konstruktora klasy Objekt i jest automatycznie niszczony po wyjściu z funkcji. Tak więc po zakończeniu wywołania konstruktora Objekt obiektu klasy Objekt_2 już nie będzie.>

Kumam, dzięki ;)

edytowany 1x, ostatnio: CzakuGim
grzesiek51114
grzesiek51114
No to oznacz prawidłową odpowiedź, kończąc wątek.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.