ตัวทำลาย เป็นฟังก์ชันของคลาสใน c++ ที่ทำหน้าที่ลบออบเจกต์ของคลาส
เรียกผู้ทำลาย
Destructor ถูกเรียกเมื่ออ็อบเจ็กต์ของคลาสอยู่นอกขอบเขตในโปรแกรม กรณีที่วัตถุอยู่นอกขอบเขต
-
โปรแกรมอยู่นอกขอบเขตของฟังก์ชัน
-
สิ้นสุดโปรแกรม
-
บล็อกการเริ่มต้นตัวแปรท้องถิ่นของวัตถุนั้นอยู่นอกขอบเขต
-
เมื่อตัวดำเนินการของวัตถุถูกลบ
ตัวอย่าง
มาดูรหัสและเดาผลลัพธ์ของโปรแกรมกัน
#include <iostream> using namespace std; int i; class destructor { public: ~destructor(){ i=10; } }; int valueInitializer() { i=3; destructor d1; return i; } int main() { cout<"i = "<<valueInitializer()<<endl; return 0; }
ผลลัพธ์
i = 3
มาทำความเข้าใจโค้ดกันก่อน ที่นี่เราได้สร้างตัวแปรโกลบอล I จากนั้นในฟังก์ชันกำหนดค่าเริ่มต้น เราได้เปลี่ยนค่าของมัน ที่นี่ เราได้เริ่มต้นมันด้วยค่า 3 จากนั้นสร้างวัตถุ d1 แล้วคืนค่ากลับมา
คาดเดาผลลัพธ์?
คือ 3 ปรบมือให้กับคุณถ้าคุณเดาถูกและไม่ต้องกังวลหากคุณคิดว่ามันคือ 10 ตอนนี้ดูว่าเกิดอะไรขึ้นที่นี่
ตามที่กล่าวไว้ข้างต้น destructor จะถูกเรียกเมื่อฟังก์ชันการเรียกอยู่นอกขอบเขต และก่อนที่จะออกจากขอบเขต ฟังก์ชันได้คืนค่า 3 กลับมา
ตัวอย่าง
ลองเดาผลลัพธ์ของบล็อกนี้อีกครั้งเดี๋ยวนี้
#include <iostream> using namespace std; int i; class destructor { public: ~destructor(){ i=10; } }; int& valueInitializer() { i=3; destructor d1; return i; } int main() { cout<<"i = "<<valueInitializer()<<endl; return 0; }
ผลลัพธ์
โค้ดนี้หน้าตาคล้ายกันแต่อันนี้
พิมพ์ :i =10 แทน
ทำไม?
ที่นี่ เราได้ส่งคืนการอ้างอิงตัวแปรแทนค่า ดังนั้นเมื่อมีการเรียกตัวทำลายล้าง มันจะเปลี่ยนค่าเป็น 10 และเมื่ออ้างอิงผ่าน 10 จะถูกพิมพ์