Nếu chúng ta định nghĩa một lớp trừu tượng có một destructor ảo thuần túy, tại sao chúng ta phải đưa ra một định nghĩa về một destructor trong lớp trừu tượng?Câu hỏi về destructor ảo tinh khiết
Trả lời
Hàm hủy cho lớp cơ sở phải được gọi khi đối tượng bị hủy, do đó cần định nghĩa.
Như đã được Jesse chỉ ra, các trình phá hủy kế thừa luôn được gọi (trình biên dịch được gọi cho bạn bằng cách không có cách nào để ghi đè hành vi này), vì vậy nó là lý do khiến một trình phá hủy ảo phải thực hiện. Vì vậy, nếu một destructor ảo tinh khiết phải có một thực hiện, sự khác biệt giữa một destructor ảo tinh khiết và một destructor ảo thường xuyên là gì? Nếu lớp trừu tượng của bạn chỉ có khai phá ảo được khai báo và không có các phương thức ảo thuần túy nào khác, làm cho destructor tinh khiết sẽ ngăn cản ai đó có thể khởi tạo lớp trừu tượng.
Chỉ một dtor ảo mới có thể được khai báo là thuần túy. Nhưng sau đó, kể từ khi bạn thêm một tuyên bố, bạn phải thực hiện cơ thể của dtor. Như đã đề cập, các destructors gọi dtor cha mẹ của họ, tất cả lên đến chuỗi thừa kế.
Bởi vì tiêu chuẩn nói vậy:
12.4.7 Destructor thể được khai báo ảo (10,3) hoặc tinh khiết ảo (10.4); nếu bất kỳ đối tượng nào của lớp đó hoặc bất kỳ lớp dẫn xuất nào được tạo ra trong chương trình, thì hàm hủy được xác định.
Lý do cho điều này là nó được gọi một cách rõ ràng khi đối tượng của lớp dẫn xuất bị hủy.
Xem thêm câu trả lời cho câu hỏi trước đây của tôi: Under what circumstances is it advantageous to give an implementation of a pure virtual function?
Có gì sai với câu trả lời này? Hoặc SO cho vấn đề đó? – Tobias
Không đúng khi nói rằng nó được gọi là "rõ ràng". Việc bạn tham chiếu tiêu chuẩn là hữu ích, nhưng bạn nên chỉnh sửa câu trả lời của mình để câu trả lời chính xác hơn. "một cách rõ ràng" là ngược lại với cách mà các destructor thường được gọi. – nobar
- 1. Mặc định tinh khiết destructor ảo
- 2. Câu hỏi về phương pháp [Tinh khiết]
- 3. tinh khiết destructor ảo trong C++
- 4. C++ câu hỏi lớp học ảo tinh khiết
- 5. constructor được bảo vệ so với destructor ảo tinh khiết
- 6. Quá tải chức năng ảo tinh khiết
- 7. desctructor ảo trên tinh khiết trừu tượng lớp cơ sở
- 8. tinh khiết ảo và inline nét
- 9. c + +, được bảo vệ cơ sở ảo trừu tượng tinh khiết hủy hoại riêng ảo
- 10. Lớp học ảo tinh khiết và bộ sưu tập (vector?)
- 11. Nhiều thừa kế và tinh khiết chức năng ảo
- 12. python tinh khiết ssh
- 13. câu hỏi về mysql_real_escape_string
- 14. Câu hỏi với các chức năng ảo
- 15. Arduino trong tinh khiết C
- 16. Câu hỏi về giấy phép di chuyển ReSharper Câu hỏi
- 17. CRT destructor ảo
- 18. Câu hỏi về C bitfields
- 19. Câu hỏi về round_up macro
- 20. Câu hỏi mới về COM
- 21. Câu hỏi về Java tĩnh
- 22. Câu hỏi về JPA Cascading
- 23. Câu hỏi chung về Ruby
- 24. Câu hỏi về đại biểu
- 25. Câu hỏi về PHP Ngày
- 26. Cách tinh chỉnh mã thông báo câu hỏi NLTK
- 27. Câu hỏi chuyển đổi C++ sang Java về extern "C"
- 28. phương pháp ảo tinh khiết trong lớp trừu tượng có nguồn gốc
- 29. R Chỉ số 'độ tinh khiết' nhóm
- 30. Câu hỏi khái niệm về Python Threading
Duplicate http://stackoverflow.com/questions/630950/pure-virtual-destructor-in-c – ralphtheninja