Jeśli zdefiniujemy abstrakcyjną klasę, która ma czysty wirtualny destruktor, dlaczego musimy podać definicję destruktora w klasie abstrakcji?Pytanie o czysty wirtualny destruktor
Odpowiedz
Destirator dla klasy bazowej musi zostać wywołany, gdy obiekt jest niszczony, więc potrzebuje definicji.
Jak zauważył Jesse, odziedziczone destruktory są zawsze wywoływane (są one wywoływane przez kompilator bez możliwości zastąpienia tego zachowania), więc oczywiste jest, że wirtualny destruktor musi mieć implementację. Więc jeśli czysty wirtualny destruktor musi mieć implementację, jaka jest różnica między czystym wirtualnym destruktorem a zwykłym wirtualnym destruktorem? Jeśli twoja klasa abstrakcyjna ma tylko deklarator wirtualnego destruktora i nie ma innych czystych metod wirtualnych, uczynienie destruktora czystym uniemożliwi komukolwiek tworzenie instancji klasy abstrakcyjnej.
Tylko wirtualny dtor może zostać zadeklarowany jako czysty. Ale potem, od dodania deklaracji, musisz wdrożyć ciało dtor. Jak już wspomniano, destruktory nazywają macierzystego dtora, aż do łańcucha dziedziczenia.
Ponieważ średnia tak mówi:
12.4.7 Destruktor może być uznana wirtualna (10.3) lub czystego wirtualnego (10,4); jeśli w programie zostaną utworzone jakiekolwiek obiekty tej klasy lub klasy pochodnej, zdefiniowany zostanie destruktor.
Powodem tego jest to, że nazywa się to jawnie, gdy obiekt klasy pochodnej zostanie zniszczony.
Zobacz również odpowiedzi na moje poprzednie pytanie: Under what circumstances is it advantageous to give an implementation of a pure virtual function?
Co jest złego w tej odpowiedzi? Lub SO w tej sprawie? – Tobias
Nie można powiedzieć, że nazywa się to "jawnie". Pomocne było odwołanie się do standardu, ale powinieneś edytować swoją odpowiedź, aby była bardziej poprawna formalnie. "jawnie" jest przeciwieństwem tego, jak zwykle wywoływane są destruktory. – nobar
- 1. CRT wirtualny destruktor
- 2. Czysty wirtualny operator
- 3. Czy domyślny destruktor może zostać wygenerowany automatycznie jako destruktor wirtualny?
- 4. Czy muszę jawnie wywoływać podstawowy wirtualny destruktor?
- 5. Dlaczego destruktor QWidget nie jest wirtualny?
- 6. Czy destruktor generowany przez kompilator abstrakcyjnej klasy bazowej będzie wirtualny?
- 7. W jakich warunkach generowany jest czysty kod wirtualny?
- 8. wirtualny desctructor na czystym abstrakcyjnej klasy bazowej
- 9. Pytanie o wyjściu var_dump
- 10. Pytanie o foreach wartości
- 11. pytanie o dziedziczenie nowicjusza
- 12. C# - pytanie o strumień
- 13. Pytanie o bezpieczeństwo debugowania
- 14. pytanie o bitmask?
- 15. Pytanie o klasyczne MVC
- 16. Pytanie o konwersję obiektu JSON
- 17. MySQL pytanie o „odwróconej lubi”
- 18. Stylistic pytanie o powrocie void
- 19. Pytanie o const_cast w C++
- 20. Pytanie o wyrobienie Microsoft ASM?
- 21. Wzorcowe pytanie o wzorzec roli
- 22. pytanie o źródła w Tcl
- 23. Proste pytanie o java SimpleDateFormat
- 24. Pytanie o projekt warstwy bazowej
- 25. Wskaźnik wirtualny
- 26. Czy domyślny destruktor wirtualny uniemożliwia wykonywanie operacji przenoszenia generowanych przez kompilator?
- 27. Zniszczenie członków klasy, gdy destruktor nie nazywa
- 28. domyślny wirtualny d'tor
- 29. Pytanie o wektory, wskaźniki i iteratory
- 30. Ograniczenia paralelizmu (pytanie o rozmowę kwalifikacyjną)
Duplikat http://stackoverflow.com/questions/630950/pure-virtual-destructor-in-c – ralphtheninja