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

Destructor ส่วนตัวใน C ++


ที่นี่เราจะดูว่าจะเป็นอย่างไรหากตัวทำลายล้างเป็นแบบส่วนตัวใน C ++ ให้เราดูตัวอย่างโค้ดเพื่อทำความเข้าใจ

รหัสนี้มีตัวทำลายส่วนตัว แต่จะไม่สร้างข้อผิดพลาดใด ๆ เนื่องจากไม่มีการสร้างวัตถุ

ตัวอย่าง

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class(){
         //private destructor
      }
};
int main() {
}


ในโปรแกรมนี้ จะทำให้เกิดข้อผิดพลาดในการคอมไพล์ ในขณะที่เรากำลังพยายามสร้างหนึ่งอ็อบเจ็กต์ แต่คอมไพเลอร์สามารถสังเกตได้ว่าตัวทำลายล้างไม่สามารถเข้าถึงได้ ดังนั้นจึงไม่สามารถทำลายได้หลังจากเสร็จสิ้นภารกิจ

ตัวอย่าง

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class obj;
}

ผลลัพธ์

[Error] 'my_class::~my_class()' is private

ตอนนี้ ถ้าเราสร้างพอยน์เตอร์หนึ่งตัวสำหรับคลาสนั้น มันจะไม่สร้างข้อผิดพลาดเพราะไม่มีการสร้างอ็อบเจกต์จริง

ตัวอย่าง

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj;
}


หากวัตถุหนึ่งถูกสร้างขึ้นโดยใช้ตัวดำเนินการใหม่ ก็จะไม่มีข้อผิดพลาดเกิดขึ้นเช่นกัน คอมไพเลอร์คิดว่านี่เป็นความรับผิดชอบของโปรแกรมเมอร์ในการลบวัตถุออกจากหน่วยความจำ

ตัวอย่าง

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj = new my_class;
}

ผลลัพธ์

 

ตอนนี้ หากเราเพิ่มคำสั่ง delete เพื่อลบอ็อบเจ็กต์ มันจะสร้างข้อผิดพลาดสำหรับตัวทำลายส่วนตัว

ตัวอย่าง

#include <iostream>
using namespace std;
class my_class {
   private:
      ~my_class() {
         //private destructor
      }
};
int main() {
   my_class *obj = new my_class;
   delete obj;
}

ผลลัพธ์

[Error] 'my_class::~my_class()' is private