Wywolywanie destruktora wirtualnego

Wywolywanie destruktora wirtualnego
  • Rejestracja: dni
  • Ostatnio: dni
0

Mam pewne pytanie:

class Klasa1
{
....
virtual ~Klasa1()
{
...
}
};

class Klasa2: public Klasa1
{
~Klasa2(){ ... }
};

pozniej mam stworzona tablice
vector <Klasa1 *> tablica;

i w programie musze wywolac recznie destruktor w taki sposob:

tablica[ktor_element]->~Klasa1();

i moje pytanie czy wywoluje ten destruktor poprawnie? Chodzi o to czy jesli wyrazenie tablica[ktory_element] bedzie typu Klasa2 to czy wywola mi sie destruktor z tej klasy Klasa2, czy mimo tego, że jest to destruktor wirtualny zawsze bedzie wywolywac się ten destruktor Klasa1 bez wzgledu na typ jaki jest w tablicy?

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
2

To łatwo sprawdzić.

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Nie potrzebujesz wywołania destruktora, potrzebujesz zwolnienia pamięci, które automatycznie wywoła destruktor: delete tablica[ktor_element];

  • Rejestracja: dni
  • Ostatnio: dni
0

a czy jesli zrobie tablica.erase(tablica.begin()+element) , to czy to wyrazenie wywola mi destruktor czy to tak nie dziala?

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

Jak chcesz działań automagicznych to użyj autoptr

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
1

a czy jesli zrobie tablica.erase(tablica.begin()+element) , to czy to wyrazenie wywola mi destruktor czy to tak nie dziala?
To również łatwo sprawdzić.

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.