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

question-closed (czysto) wirtualny destruktor

Object Storage Arubacloud
0 głosów
1,049 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,590 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ź 199 wizyt
0 głosów
2 odpowiedzi 2,425 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez Utau Użytkownik (900 p.)
0 głosów
1 odpowiedź 469 wizyt

92,694 zapytań

141,606 odpowiedzi

320,106 komentarzy

62,051 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.

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...