Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> C++

Khác biệt giữa Destructor và hàm free() trong C++


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.