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

Tại sao cần pure virtual destructor trong C++


Pure virtual destructor cho phép tạo lớp trừu tượng (abstract class) mà vẫn đảm bảo hủy đúng thứ tự: destructor lớp con chạy trước, rồi destructor lớp cơ sở. Bắt buộc phải cung cấp thân hàm cho pure virtual destructor, nếu không linker sẽ lỗi vì không tìm thấy định nghĩa khi hủy đối tượng.

Ví dụ minh họa

#include <iostream>
using namespace std;

class Base {
public:
    virtual ~Base() = 0; // pure virtual destructor
};
Base::~Base() { cout << "Pure virtual destructor called\n"; } // Phải định nghĩa

class Derived : public Base {
public:
    ~Derived() { cout << "~Derived\n"; }
};

int main() {
    Base *b = new Derived();
    delete b; // Gọi ~Derived() rồi ~Base()
    return 0;
}

Kết quả

~Derived
Pure virtual destructor called