2012-06-11 26 views
8

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

+1

Đố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 ... –

Trả lời

14

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.

+4

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

+1

@ valdo: Điểm công bằng! Tôi đã sửa đổi câu trả lời của tôi ... –

+2

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. –

2

Trong một từ: CÓ.
Hoàn toàn hợp lệ để sử dụng this trong D`TOR