• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

question-closed (czysto) wirtualny destruktor

0 głosów
1,346 wizyt
pytanie zadane 8 grudnia 2018 w C i C++ przez dawid2002 Mądrala (5,190 p.)
zamknięte 8 grudnia 2018 przez dawid2002

Witam, ostatnio natknął się na taki problem, że chciałem stworzyć czysto wirtualny destruktor, więc napisałem taki kod:

#include <iostream>

using namespace std;

class Ca
{
public:

      virtual ~Ca() = 0;
};

class Cb :public Ca
{

public:

      virtual ~Cb()
      {
          cout << "(obiekt) UMIERAM!!!" << endl;
      }

};

int main()
{
   Ca *wsk = new Cb;

   delete wsk;

   return 0;
}

I nagle kompilator pokazał błąd, więc postanowiłem napisać tego destruktora normalnie wirtualnego, czyli z ciałem i wyszło, że tym razem kod działał.

I teraz mam takie pytanie, czy to oznacza, że wirtualnych destruktorów nie można pisać jako czyste metody wirtualne?

komentarz zamknięcia: znam już odpowiedź na moje pytanie

2 odpowiedzi

+1 głos
odpowiedź 8 grudnia 2018 przez monika90 Pasjonat (22,940 p.)
wybrane 8 grudnia 2018 przez dawid2002
 
Najlepsza

Można, tylko wciąż trzeba zdefiniować ciało destruktora i to poza definicją klasy. Czyli tak:

class Ca
{
public:
      virtual ~Ca() = 0;
};

inline Ca::~Ca() { }

(z inline jeżeli to ma być w pliku nagłówkowym)

komentarz 8 grudnia 2018 przez dawid2002 Mądrala (5,190 p.)

Dzięki za pomoc yes

+1 głos
odpowiedź 8 grudnia 2018 przez criss Mędrzec (172,570 p.)

Destruktor może być pure virtual, ale jednocześnie musi też być zaimplementowany (tak, to możliwe). Funkcja pure virtual (=0) wymusza nadpisanie jej przez klase pochodną, ale może mieć implementacje. W przypadku destruktora jest to konieczne, bo zawsze będzie zawołany przed usunięciem obiektu.

Więc dopisz do kodu po prostu

Ca::~Ca()
{
   cout << "Ca dtor\n";
}

i powinno się skompilować.

komentarz 8 grudnia 2018 przez dawid2002 Mądrala (5,190 p.)

Dzięki za pomoc yes

Podobne pytania

0 głosów
1 odpowiedź 341 wizyt
0 głosów
2 odpowiedzi 3,090 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez Utau Użytkownik (900 p.)
0 głosów
1 odpowiedź 769 wizyt

93,742 zapytań

142,678 odpowiedzi

323,297 komentarzy

63,328 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...