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

question-closed (czysto) wirtualny destruktor

Aruba Cloud - Virtual Private Server VPS
0 głosów
1,153 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ź 230 wizyt
0 głosów
2 odpowiedzi 2,618 wizyt
pytanie zadane 11 marca 2018 w C i C++ przez Utau Użytkownik (900 p.)
0 głosów
1 odpowiedź 574 wizyt

93,332 zapytań

142,326 odpowiedzi

322,405 komentarzy

62,669 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...