Trong lập trình hướng đối tượng, hàm hủy (tiếng Anh: destructor, dtor) là một phương thức được gọi tự động để hủy bỏ một đối tượng.
Điều này xảy ra khi thời gian sống của đối tượng được gắn với tầm vực và sự thực thi rời khỏi tầm vực đó, hay khi nó được nhúng vào trong đối tượng khác mà thời gian sống của đối tượng đó kết thúc, hoặc khi nó được cấp phát động và bị giải phóng một cách tường minh. Mục đích chính của nó là để giải phóng tài nguyên (cấp phát bộ nhớ, các tập tin hay socket được mở, kết nối cơ sở dữ liệu, khóa tài nguyên (resource lock)...) bị giữ bởi đối tượng trong suốt thời gian sống và/hoặc các thực thể bị xoá khỏi thanh ghi nhưng cẫn còn giữ tham chiếu tới nó. Việc sử dụng hàm hủy là cần thiết cho quá trình RAII.
Trong ngôn ngữ hỗ trợ cơ chế gom rác tự động, rất khó để xác định một cách chắc chắn việc gọi hàm hủy, và do vậy các ngôn ngữ này được xem là không phù hợp cho RAII. Trong các ngôn ngữ đó, hủy liên kết từ tài nguyên có sẵn phải được gọi tường minh bằng một hàm thích hợp (thường gọi là Dispose()
). Phương thức này cũng được khuyên dùng để giải phóng tài nguyên, thay vì dùng finalizer.
~this()
(trong khi hàm tạo được khai báo với this()
).destructor
và có thể dùng tên do người dùng định nghĩa (user-defined name), nhưng thường dùng tên Destroy
.dealloc
.DESTROY
; trong phần mở rộng hệ thống đối tượng Moose, nó có tên DEMOLISH
.__destruct
. Không có hàm hủy ở các phiên bản PHP trước đó.__del__
.deinit
.Hàm hủy có cùng tên với lớp, nhưng với một dấu ngã (~) trước nó. Nếu đối tượng được tạo ra như một biến tự động, hàm hủy của nó được tự động gọi khi nó ra khỏi tầm vực.
#include #include class foo_t { friend std::ostream & operator << (std::ostream & os, foo_t const & foo) { os << foo.data; return os; } private: char * data; foo_t(foo_t const & other); // disable copy construction foo_t& operator = (foo_t const & other); // disable assignment public: foo_t(void): data(new char[ 14 ]) { std::strcpy(data, "Hello, World!"); } ~foo_t(void) { delete [] data; } }; int main() { foo_t foo; std::cout << foo << '\n'; }
Hàm hủy trong Xojo Lập Trình Máy Tính Hàm Hủy (REALbasic) có thể ở một trong hai dạng. Mỗi dạng dùng một khai báo phương thức thông thường với một tên đặc biệt (không có tham số và giá trị trả về).
This article uses material from the Wikipedia Tiếng Việt article Hàm hủy (lập trình máy tính), which is released under the Creative Commons Attribution-ShareAlike 3.0 license ("CC BY-SA 3.0"); additional terms may apply (view authors). Nội dung được phát hành theo CC BY-SA 4.0, ngoại trừ khi có ghi chú khác. Images, videos and audio are available under their respective licenses.
®Wikipedia is a registered trademark of the Wiki Foundation, Inc. Wiki Tiếng Việt (DUHOCTRUNGQUOC.VN) is an independent company and has no affiliation with Wiki Foundation.