Trong ngôn ngữ lập trình C++, hàm hủy (destructor) là một thành phần quan trọng của một lớp. Nó được sử dụng để giải phóng tài nguyên được cấp phát bởi đối tượng khi đối tượng đó không còn được sử dụng nữa. Hàm hủy có tên giống với tên lớp, nhưng được đặt trước bởi dấu gạch chân (~).
Mục đích chính của hàm hủy là thực hiện các công việc dọn dẹp như giải phóng bộ nhớ, đóng tệp tin, đóng kết nối cơ sở dữ liệu, hoặc giải phóng bất kỳ tài nguyên nào khác mà đối tượng đã cấp phát trong quá trình sống.
Cú pháp của một hàm hủy như sau:
class ClassName {
public:
// Các thành phần và phương thức khác của lớp
~ClassName() {// Thân hàm hủy
// Dọn dẹp các tài nguyên đã cấp phát
}
};
Một số điểm quan trọng về hàm hủy:
- Hàm hủy không có đối số và không trả về giá trị.
- Một lớp có thể có nhiều hàm hủy, nhưng chỉ có một hàm hủy chính. Hàm hủy chính được gọi khi đối tượng được hủy.
- Hàm hủy được gọi tự động khi đối tượng ra khỏi phạm vi của nó hoặc khi delete được gọi để giải phóng bộ nhớ cấp phát động cho đối tượng.
- Nếu một lớp không có hàm hủy, trình biên dịch sẽ tạo một hàm hủy mặc định tự động.
Ví dụ minh họa:
class MyClass {
public:
MyClass() {
std::cout << "Constructor called!" << std::endl;
}
~MyClass() {
std::cout << "Destructor called!" << std::endl;
}
};
int main() {
MyClass obj1; // Constructor called!
{
MyClass obj2; // Constructor called!
} // Destructor called!
return 0; // Destructor called!
}
Kết quả thực thi chương trình trên sẽ là:x
Constructor called!
Constructor called!
Destructor called!
Destructor called!
Trong ví dụ trên, hàm hủy được gọi tự động khi đối tượng ra khỏi phạm vi của nó. Khi obj1 ra khỏi phạm vi main(), hàm hủy của nó được gọi tự động. Tương tự, khi obj2 ra khỏi phạm vi của khối con trong main(), hàm hủy của nó được gọi.
Hàm hủy là một khái niệm quan trọng trong C++ để đảm bảo việc giải phóng tài nguyên một cách an toàn và đúng thời điểm. Việc sử dụng hàm hủy phù hợp sẽ giúp tránh rò rỉ bộ nhớ và các vấn đề khác liên quan đến quản lý tài nguyên trong chương trình của bạn.