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

เล่นกับ Destructors ใน C++


ตัวทำลาย เป็นฟังก์ชันของคลาสใน 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 จะถูกพิมพ์