Destructor: hàm thành viên đặc biệt (~ClassName()), tự động gọi khi object hết scope hoặc delete. Dùng để dọn dẹp tài nguyên (đóng file, giải phóng memory thành viên...). Không tham số, không trả về.
free(): hàm C (thư viện <cstdlib>) giải phóng memory cấp phát bằng malloc/calloc/realloc. Không gọi destructor.
delete: toán tử C++, giải phóng memory new VÀ gọi destructor.
Ví dụ
class MyClass {
public: ~MyClass() { cout << "Destructor called\n"; }
};
int main() {
MyClass* p = new MyClass();
delete p; // gọi ~MyClass() rồi free memory
}Kết quả
Destructor called
Quy tắc: new ↔ delete, malloc ↔ free. Không trộn lẫn.