นอกจากตัวสร้างที่ถูกเรียกโดยอัตโนมัติเมื่อมีการสร้างคลาส อ็อบเจ็กต์ ตามที่กล่าวไว้ในส่วนก่อนหน้า ฟังก์ชันจะถูกเรียกโดยอัตโนมัติเมื่ออ็อบเจ็กต์ถูกทำลาย นอกจากนี้ยังมีชื่อเดียวกันกับชื่อคลาสและไม่มีค่าส่งคืน มีเครื่องหมาย ตัวหนอน ~ อยู่หน้าชื่อ ใช้ เพื่อแยกแยะความแตกต่างระหว่าง Constructor ฟังก์ชันของมันจะใช้เพื่อล้างผลที่ตามมาหลังจากที่วัตถุถูกปล่อยออกมา มันคือ ตัวทำลาย
เช่นเดียวกับตัวสร้างและชื่อคลาส ไม่มีค่าส่งคืน หากผู้ใช้ไม่ได้กำหนดไว้ ระบบจะสร้างตัวทำลายที่ว่างเปล่าโดยอัตโนมัติ เมื่อผู้ใช้กำหนดแล้ว มันจะถูกเรียกโดยอัตโนมัติเมื่อวัตถุถูกทำลาย
ไม่เหมือนคอนสตรัคเตอร์แม้ว่าจะเป็นประเภทสาธารณะก็ตาม การก่อสร้างสามารถโอเวอร์โหลดได้และมีพี่น้องหลายคน แต่ตัวทำลายล้างไม่สามารถโอเวอร์โหลดได้ แต่อาจเป็นฟังก์ชันเสมือนได้ และคลาสสามารถมีตัวทำลายได้เพียงตัวเดียวเท่านั้น
ต่อไป เราจะยกตัวอย่างคลาส Student และเพิ่ม destructor ต่อไป ในเวลาเดียวกัน เราก็เพิ่มข้อมูลเกี่ยวกับคลาสปัจจุบันทั้งใน Constructor และ Destructor เพื่อระบุว่าคลาสใดถูกสร้างและทำลาย โปรดอ่านโค้ดอย่างละเอียด : :
#include<iostream>#include<Cstring>usingnamespacestd;classStudent{private:intnum;//ชื่อหมายเลขนักเรียน[100];//ชื่อ intscore;//score public:Student(intn,char*str,ints);~Student ();intprint();intSet(intn,char*str,ints);};Student::Student(intn,char*str,ints){num=n;strcpy(name,str);score=s;cout <<num<<<<ชื่อ<<<<คะแนน<<;cout<<ตัวสร้าง<<endl;}นักเรียน::~นักเรียน(){cout<<num<<<<ชื่อ<<<<คะแนน<<; cout<<destructor<<endl;}intStudent::print(){cout<<num<<<<name<<<<score<<endl;return0;}intStudent::Set(intn,char*str,ints) {num=n;strcpy(name,str);score=s;}intmain(){StudentA(100,dot,11);StudentB(101,cpp,12);return0;}
โปรดทำความเข้าใจ Constructor และ Destructor อย่างละเอียดในโค้ดด้านบน และโปรดทราบว่ามีการกำหนดออบเจ็กต์ A และ B สองตัวไว้ในฟังก์ชันหลัก และทดสอบบนคอมพิวเตอร์ของคุณเอง คุณจะเห็นว่าเอฟเฟกต์การทำงานเป็นดังนี้:
คุณจะเห็นว่าลำดับการเรียกตัวสร้างและลำดับการเรียกตัวทำลายของวัตถุ A และ B นั้นตรงกันข้ามอย่างสิ้นเชิง! เหตุผลก็คือออบเจ็กต์ A และ B เป็นทั้งออบเจ็กต์ในเครื่องและยังถูกจัดเก็บไว้ในพื้นที่สแต็กด้วย
โปรดทดสอบและตรวจสอบผลลัพธ์ด้วยตนเอง!