Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

เหตุใดเราจึงต้องการตัวทำลายเสมือนบริสุทธิ์ใน C ++


ไม่มีผลร้ายในการอนุญาตให้ใช้ตัวทำลายเสมือนบริสุทธิ์ในโปรแกรม C++ จะต้องจัดเตรียมตัวฟังก์ชันสำหรับ destructor เสมือนแท้ ๆ เนื่องจาก destructor ของคลาสที่ได้รับจะถูกเรียกก่อน destructor คลาสพื้นฐาน ดังนั้นหากเราไม่ได้จัดเตรียมฟังก์ชัน body จะพบว่าไม่มีสิ่งใดถูกเรียกระหว่างการทำลายวัตถุและข้อผิดพลาดจะเกิดขึ้น . เราสามารถสร้างคลาสนามธรรมได้อย่างง่ายดายด้วยการสร้างตัวทำลายเสมือนบริสุทธิ์พร้อมคำจำกัดความ

โค้ดตัวอย่าง

#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;
}

ผลลัพธ์

~Derived
Pure virtual destructor is called