Computer >> Máy Tính >  >> Lập trình >> C ++

Tại sao chúng ta cần một hàm hủy ảo thuần túy trong C ++?

Không có tác dụng xấu nào khi cho phép một trình hủy ảo thuần túy trong chương trình C ++. Phải cung cấp một thân hàm cho hàm hủy thuần ảo vì hàm hủy của lớp dẫn xuất được gọi trước tiên trước hàm hủy lớp cơ sở, vì vậy nếu chúng ta không cung cấp một thân hàm, nó sẽ không tìm thấy gì được gọi trong quá trình hủy đối tượng và lỗi sẽ xảy ra. . Chúng ta có thể dễ dàng tạo một lớp trừu tượng bằng cách tạo một hàm hủy ảo thuần túy với định nghĩa của nó.

Mã mẫu

#include <iostream>
using namespace std;

class B {
   public: virtual ~B()=0; // Pure virtual destructor
};

B::~B() {
   cout << "Pure virtual destructor is called";
}

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

int main() {
   B *b = new D();
   delete b;
   return 0;
}

Đầu ra

~Derived
Pure virtual destructor is called