Xin lưu ý: Câu hỏi này là về sự khác biệt về thuật ngữ giữa các từ "destructor" và "finalizer" và cách sử dụng chính xác của chúng. Tôi đã chỉ cung cấp các ví dụ về việc sử dụng chúng trong C# và C++/CLI để chứng minh tại sao tôi hỏi câu hỏi đó. Tôi cũng nhận thức được cách nó được thực hiện trong cả C# và CLR, nhưng tôi hỏi về việc sử dụng đúng thuật ngữ.Sự khác biệt giữa destructor và finalizer?
Trong C# thế giới thuật ngữ "destructor" và "finalizer" dường như được sử dụng khá nhiều thay thế cho nhau, mà tôi nghi ngờ là vì C# đặc điểm kỹ thuật mô tả các chức năng dọn dẹp không xác định bằng cách sử dụng từ "destructor" , trong khi tài liệu CLR luôn sử dụng từ "finalizer", vì vậy trong các cõi của C# chúng có nghĩa là cùng một thứ.
Tuy nhiên, trong đặc tả C++/CLI, có sự khác biệt giữa hai loại. Nó cho phép xóa sạch xác định và không xác định và sử dụng thuật ngữ "destructor" cho chức năng xác định và "finalizer" cho chức năng không xác định:
Trình hoàn thiện cung cấp dọn dẹp không xác định. Một finalizer là một "cơ hội cuối cùng" chức năng được thực hiện trong quá trình thu gom rác, thường là trên một đối tượng có destructor đã không được thực thi.
Ngoài ra các mô tả Wikipedia của destructor và finalizer chỉ ra rằng hàm hủy và finalizers là những khái niệm riêng biệt, và hỗ trợ sử dụng spec của C++/CLI của các điều khoản liên quan đến định mệnh với:
Không giống như hàm hủy, finalizers là không xác định. Một destructor được chạy khi chương trình giải phóng một đối tượng một cách rõ ràng. Một finalizer, ngược lại, được thực thi khi hệ thống thu gom rác bên trong giải phóng đối tượng.
Những câu hỏi:
Có, từ một điểm khoa học máy tính xem, một sự khác biệt rõ ràng giữa một "destructor" và một "finalizer", hoặc là một cái gì đó thuật ngữ mà chỉ có thể được định nghĩa theo ngữ cảnh?
Nếu có sự khác biệt được xác định rõ ràng, thì tại sao thông số C# sử dụng thuật ngữ 'sai'?
Thú vị; từ các ghi chú, nó chắc chắn có vẻ giống như lúc destructor thời gian đã không ngụ ý determinism vì vậy tôi nghĩ bạn có lẽ phải rằng đó là một sự phân biệt đã phát triển kể từ đó. –