ที่นี่เราจะดูว่าจะเป็นอย่างไรหากตัวทำลายล้างเป็นแบบส่วนตัวใน 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