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

เมื่อไหร่ควรใช้ virtual destructors ใน C++


Scott Meyers (Effective C++) แนะนำ:

ถ้าคลาสมี virtual function ใดๆ ควรมี virtual destructor ด้วย และคลาสที่ไม่ได้ออกแบบมาเป็น base class หรือใช้ polymorphically ไม่ควรมี virtual destructor

เหตุผล: หากสร้าง object ด้วย derived constructor แต่ชี้ด้วย base pointer:

Base *b = new Derived();
delete b;  // ถ้า Base::~Base() ไม่ใช่ virtual → UB!

ถ้า destructor ไม่ใช่ virtual: delete b เรียก Base destructor เท่านั้น Derived destructor ไม่ถูกเรียก → resource leak

Virtual destructor ทำให้ dynamic dispatch ทำงาน เรียก Derived destructor ก่อน แล้วค่อย Base destructor