Có hợp lệ để gọi một số chức năng trong destructor với đối số this
? Chức năng không lưu trữ con trỏ, nhưng giả sử đối tượng đầy đủ chức năng.Cách sử dụng "này" trong destructor
Trả lời
this
vẫn hợp lệ trong trình hủy.
Tuy nhiên, bạn cần lưu ý rằng các chức năng ảo không còn hoạt động đúng cách như bạn có thể mong đợi khi đối tượng đang bị hủy; xem ví dụ Never Call Virtual Functions during Construction or Destruction. Về cơ bản, loại động của đối tượng được sửa đổi khi mỗi destructor hoàn thành.
Chúng ** làm ** làm việc đúng cách. Nó chỉ là định nghĩa của các chức năng làm việc đúng là khác nhau. Ý tôi là - chúng hoạt động như thiết kế. – valdo
@ valdo: Điểm công bằng! Tôi đã sửa đổi câu trả lời của tôi ... –
Hoặc dù sao, định nghĩa của ủy ban "làm việc đúng" không phải là rất hữu ích trong thực tế. Tôi chắc chắn rằng nó có thể phát minh ra một số trường hợp sử dụng mà bạn muốn gọi các phiên bản lớp cơ sở của các hàm ảo trong ctor/dtor cơ sở và ủy ban đã có một thứ gì đó thuộc loại này. Nếu không, họ đã có nhiều triển khai tự do hơn, và chỉ nói rằng UB của họ sẽ thực hiện cuộc gọi. Điều đó có lẽ sẽ hiệu quả hơn, vì việc triển khai sẽ không phải tiếp tục điều chỉnh con trỏ vtable (hoặc tương đương) khi mỗi dtor hoàn thành. Vì nó là, chúng tôi trả tiền cho một cái gì đó chúng tôi không sử dụng. –
Trong một từ: CÓ.
Hoàn toàn hợp lệ để sử dụng this
trong D`TOR
- 1. khi nào sử dụng destructor trong php?
- 2. Điều này là gì enum cho trong destructor?
- 3. sử dụng quyền của std :: uncaught_exception trong một destructor
- 4. Trường hợp nào destructor ẩn trong mã này?
- 5. Một destructor - tôi nên sử dụng xóa hoặc xóa []?
- 6. Ngoại lệ trong destructor
- 7. MATLAB - chạy đối tượng destructor khi sử dụng 'rõ ràng'?
- 8. Sử dụng GMock để xác minh cuộc gọi Destructor
- 9. Cuộc gọi destructor kép lạ khi sử dụng shared_ptr
- 10. Destructor trong Objective-C++
- 11. Sử dụng này() trong mã
- 12. Cách sử dụng phương thức WebClient.DownloadDataAsync() trong ngữ cảnh này?
- 13. Cách sử dụng phương pháp này trong Xcode
- 14. Cách sử dụng Order By trong ví dụ MSDN này
- 15. destructor tĩnh
- 16. C#/CLI: Destructor không được gọi nếu Dispose() được sử dụng trong nó
- 17. Private destructor
- 18. Sử dụng "điều này" trong setters
- 19. Việc sử dụng "này" trong Java
- 20. Sử dụng từ khóa "này" trong java
- 21. Thực hiện một destructor ảo trong C + +
- 22. Pimpl + QSharedPointer - Destructor = Disaster
- 23. Objective-C destructor với ARC
- 24. Binary Search Tree Destructor
- 25. Lớp Destructor Vấn đề
- 26. Việc sử dụng "xóa mục này" là gì?
- 27. C++ default destructor
- 28. CRT destructor ảo
- 29. tinh khiết destructor ảo trong C++
- 30. Xóa có cần thiết trong một destructor?
Đối tượng hoàn toàn hợp lệ cho đến dòng cuối cùng của DTOR. Tất nhiên nếu bản thân DTOR rơi xuống các mảnh của đối tượng (ví dụ: nulls out ptr, vv) thì bạn đang tự bắn mình vào chân, nhưng hoàn toàn là mã của bạn, không phải cái mà cpler tạo ra ... –