konstruktor bazowy, wytłumaczenie

0

Cześć, mam zadanie:

Zadeklaruj klasę, która posiada:
pole prywatne (typ int) przechowujące id obiektu (będzie łatwiej na wydruku zobaczyć, który obiekt jest gdzie).
konstruktor z jednym parametrem. Ustawia id obiektu na wartość z parametru, drukuje komunikat „Utworzono...” oraz id obiektu. destruktor. drukuje komunikat „Zniszczony...” oraz id obiektu.
W głównym kodzie zadeklaruj vector, elementy typu klasy powyżej. Wykonaj pętlę (np. 10 razy), w każdej iteracji:
funkcją push_back(...) dołóż do vectora nowy obiekt, parametrem (konstruktora obiektu) ma być nr wykonania pętli.
Wydrukuj na ekranie „--------\n” (aby optycznie oddzielić poszczególne iteracje pętli).
Zaobserwuj w jaki sposób zachowuje się vector podczas realokacji. Zobacz wyświetlane komunikaty. Policz (optycznie) destruktory. Masz pomysł co się właściwie stało?

to mój kod:


#include <iostream>
#include <cstring>
#include <vector>

using namespace std;


class cClass
{
    private:
       int id;

    public:
       cClass(int id)
       {
          this->id = id;
          cout << "Utworzono... " << id << endl;
       }

       ~cClass()
       {
          cout << "Zniszczono..." << id << endl;
       }
};

void Zadanie4()
{
   std::vector<cClass>wektor;
   for(int i = 0; i<5; i++)
   {
      wektor.push_back(cClass(i));
      cout << "-------\n";
   }
}

int main()
{
    
    cout << "Zadanie 4:\n";
    Zadanie4();

}


wynik działania programu:
Zadanie 4:
Utworzono... 0
Zniszczono...0

Utworzono... 1
Zniszczono...0
Zniszczono...1

Utworzono... 2
Zniszczono...0
Zniszczono...1
Zniszczono...2

Utworzono... 3
Zniszczono...3

Utworzono... 4
Zniszczono...0
Zniszczono...1
Zniszczono...2
Zniszczono...3
Zniszczono...4

Zniszczono...0
Zniszczono...1
Zniszczono...2
Zniszczono...3
Zniszczono...4

nie rozumiem dlaczego przy każdej iteracji liczba wyświetleń "zniszczono" jest inna, mógłby ktoś pomoc mi to zrozumieć? Jeszcze z tym wyświetlaniem id, czy o to chodziło?

0

Następuje relokacja pamięci w wektorze przy dodawaniu nowego obiektu, a to oznacza stworzenie nowej tablicy obiektów i usunięcie starej (stąd rosnąca liczba wywołań destruktorów). Daj wektor.reserve(5); przed pętlą i wszystko będzie tak, jak się prawdopodobnie spodziewałeś.

1

Poczytaj o konstruktorze kopiującym.

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