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

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:

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:

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.

Objekt::Objekt()
{
    Objekt_2 objekt_2_1;
}

main:

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:

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!

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.

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:

class Klasa_zbiorcza
{
    Objekt *klasa_zbiorcza; 

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 ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1