Destructor เป็นฟังก์ชันของคลาสใน C++ ที่ทำหน้าที่ลบออบเจ็กต์ของคลาส
การเรียก Destructor
Destructor จะถูกเรียกเมื่อออบเจ็กต์ของคลาสออกจากขอบเขต (scope) ในโปรแกรม กรณีที่ออบเจ็กต์ออกจากขอบเขต:
โปรแกรมออกจากขอบเขตของฟังก์ชัน
โปรแกรมจบการทำงาน
บล็อกที่เริ่มต้นตัวแปรท้องถิ่นของออบเจ็กต์ออกจากขอบเขต
เมื่อ operator delete ของออบเจ็กต์ถูกเรียก
ตัวอย่าง
มาดูโค้ดและทายผลลัพธ์ของโปรแกรม:
#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
มาเข้าใจโค้ดก่อน ที่นี่เราสร้างตัวแปร global i แล้วในฟังก์ชัน value initialized เราเปลี่ยนค่าของมัน ที่นี่เราเริ่มต้นด้วยค่า 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 แทน
ทำไม?
ที่นี่ เราคืนค่าอ้างอิง (reference) ของตัวแปรแทนค่า ดังนั้นเมื่อ destructor ถูกเรียก มันเปลี่ยนค่าเป็น 10 และเนื่องจากส่งอ้างอิง 10 จึงถูกพิมพ์ออกมา