Chúng ta có thể chống lại nguy cơ rò rỉ bộ nhớ bằng cách định nghĩa một hàm đặc biệt gọi là destructor.
Destructors có những hạn đặc điểm sau:
- Nếu một class được đặt tên là X, destructor của nó được đặt tên là ~X
- Một class chỉ có một destructor
- Destructor phải là một hàm không có tham số
- Một destructor không nên được gọi một cách tường minh
Ví dụ sau đây đưa một class từ trang trước, nhưng có một chút sửa đổi – chúng tôi đã thêm một destructor vào class đó. Destructor giải phóng bộ nhớ được cấp phát cho trường value, bảo vệ chúng ta khỏi bị rò rỉ bộ nhớ →
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
#include <iostream> using namespace std; class Sample { public: Sample(int val) { value = new int[val]; cout << "Allocation (" << val << ") done." << endl; } ~Sample(void) { delete [] value; cout << "Deletion done." << endl; } int *value; }; void MakeALeak(void) { Sample object(1000); } int main(void) { MakeALeak(); return 0; } |
khi biên dịch và chạy, hai dòng sau sẽ được xuất ra màn hình:
1 2 |
Allocation (1000) done. Deletion done. |