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

เมื่อใดควรใช้ตัวทำลายเสมือนใน C ++


Scott Meyers ในภาษา C++ ที่มีประสิทธิภาพพูดว่า -

หากคลาสมีฟังก์ชันเสมือน คลาสนั้นควรมีตัวทำลายเสมือน และคลาสนั้นที่ไม่ได้ออกแบบมาให้เป็นคลาสพื้นฐานหรือไม่ได้ออกแบบมาให้ใช้แบบพหุสัณฐานก็ไม่ควรประกาศตัวทำลายเสมือน

ดังนั้นคุณควรประกาศ destructors เสมือนในคลาสฐาน polymorphic นี่เป็นเพราะถ้าคุณสร้างวัตถุของคลาสฐานโดยใช้ตัวสร้างที่ได้รับ -

Base *b = new Derived();
// use b
delete b;

หาก destructor ของ Base ไม่เสมือน การลบ b จะมีพฤติกรรมที่ไม่ได้กำหนดไว้ในกรณีนี้ การเรียกไปยังตัวทำลายจะได้รับการแก้ไขเหมือนกับรหัสที่ไม่ใช่เสมือนใดๆ ดังนั้น destructor ของคลาสฐานจะถูกเรียกแต่ไม่ใช่คลาสที่ได้รับ ซึ่งจะทำให้ทรัพยากรรั่วไหล