30/09/2018, 17:52

Tầm quan trọng của hàm hủy Destructor?

Hàm tạo và hàm hủy là như thế nào? Và vai trò của chúng ra sao? Chắc rất nhiều người mơ hồ về điều này, trong đó, có cả Liên. Các bờ rồ ngang qua thì chia sẻ giùm?

hong duc viết 19:57 ngày 30/09/2018

Trong mấy ngôn ngữ có Garbage Collector (GC) đó thì việc sử dụng hàm hủy là ko quan, mà sử dụng nó là có hại nhìu hơn có lợi nữa

Mai Anh Dũng viết 19:54 ngày 30/09/2018

À, hàm hủy rất quan trọng, Đạt không rõ về các ngôn ngữ có Garbage Collector (GC) nhưng trong C++ thì hàm hủy dùng để hủy dữ liệu đã được cấp phát trong hàm dựng, Constructor.

Nếu hàm dựng không xử lý đúng, tức không hủy được tài nguyên cấp phát trước đấy, thì chương trình sẽ bị leak, tức các tài nguyên được cấp không được trả lại cho hệ điều hành.

Điều này sẽ khiến cho một chương trình chạy càng lâu càng tiêu tốn nhiều tài nguyên. Tới một thời điểm nào đấy nó sử dụng hết tài nguyên được cấp và hệ điều hành buộc phải kill chương trình đang chạy.

hacked viết 19:59 ngày 30/09/2018

Em không làm hàm hủy, debug vài lần thấy bộ nhớ RAM lên đến 81%, máy chạy rất chậm. Có phải đó là hậu quả không anh?

Mai Anh Dũng viết 19:56 ngày 30/09/2018

Không chắc, còn phải xem hàm dựng cấp phát cái gì mới biết được.

Không phải mọi hàm dựng đều cấp tài nguyên, tài nguyên không chỉ là RAM, tức vùng nhớ mà còn là file. Nói thêm một ví dụ về file, khi một chương trình muốn đọc / ghi một file nào đó thì hệ điều hành sẽ cấp quyền đọc / ghi cho chương trình này, khi chương trình hủy, hoặc đoạn code sử lý file đã xong thì chương trình này phải close file, tức là release resource.

Nguyễn Trọng Phương viết 20:02 ngày 30/09/2018

Hàm dựng/hủy nếu không khởi tạo thì chương trình sẽ tự động khởi tạo giá trị cho các biến. Nhưng chỉ đúng với trường hợp nó là biến tĩnh (không phải là con trỏ như trong C/C++). Nếu dùng biến động (con trỏ) phải xây dựng hàm dựng/hủy. Nói đúng hơn hàm dựng/hủy chỉ cần thiết khi dùng biến động (con trỏ), nó cung cấp bộ nhớ cho biến và thu hồi biến khi kết thúc chương trình. Bạn thử dùng biến động (con trỏ) và không thu hồi nó xem? Nó sẽ không trả lại vùng nhớ cho RAM và cứ mỗi lần gọi chương trình nó sẽ cấp 1 vùng nhớ mới cứ như vậy cho đến khi nào full RAM thì treo . Còn đối với biến tĩnh thì sau khi kết thúc chương trình nó sẽ tự động thu hồi lại vùng nhớ nên sẽ không có việc bị chiếm vùng nhớ như biến động.

viết 20:05 ngày 30/09/2018

Hàm hủy khi làm việc với heap (đơn giản đã new thì phải có delete ), mở file thì phải có close file. Nếu không như thế thì sẽ có vấn đề xảy ra.

Minh Hoàng viết 20:02 ngày 30/09/2018

Xây dựng hàm hủy không đúng cũng làm leak memory
nói chung là làm về constructor và destructor phải cẩn thận.

Bài liên quan
0