สำหรับตัวจัดการหน่วยความจำที่ฉันเขียนด้วยภาษา C++ เพื่อพิสูจน์แนวคิด เพื่อติดตามอ็อบเจ็กต์ที่ได้รับการจัดสรร ฉันกำลังจัดสรรหน่วยความจำด้วย malloc()
ในฟังก์ชัน จากนั้นส่งคืนตัวชี้ไปที่หน่วยความจำนั้น และใช้ตัวดำเนินการวางตำแหน่งใหม่ จากนั้น เพื่อติดตามเมื่อวัตถุถูกลบ ฉันจะส่งตัวชี้ไปยังฟังก์ชันอื่นเพื่อเรียก free()
บนตัวชี้
อย่างไรก็ตาม เนื่องจากฉันใช้ free()
แทน delete
ตัวสร้างของวัตถุจึงไม่ถูกเรียกโดยอัตโนมัติเหมือนปกติ ดังนั้นฉันต้องเรียกมันเอง นอกจากนี้ เนื่องจากตัวจัดการหน่วยความจำได้รับการออกแบบให้ทำงานกับออบเจ็กต์ใดๆ จึงมีความเป็นไปได้ (และเป็นไปได้ด้วยซ้ำ) ว่า ณ จุดหนึ่งของชีวิต จะต้องปล่อยออบเจ็กต์ที่อาจมีคลาสพาเรนต์หลายคลาสหรืออยู่ลึกเข้าไปในแผนผังการสืบทอด
วิธีแก้ปัญหาเริ่มต้นของฉันสำหรับสิ่งนี้คือการเรียกตัวทำลายวัตถุฐานซึ่งจะเรียกตัวทำลายลูกทั้งหมด (หาก คำถามนี้เป็นสิ่งที่ต้องเชื่อ) แต่เนื่องจากวัตถุอาจเป็นอะไรก็ได้อย่างแท้จริงและมีชุดการสืบทอดใดๆ จึงไม่มีทางรู้ได้ว่าคลาสพื้นฐานที่แท้จริงของมันคืออะไร เป็น.
ดังนั้นคำถามของฉันคือ: จะเรียก destructor คลาสย่อยอย่างชัดเจนจะเรียก destructor ฐานทั้งหมดโดยอัตโนมัติเช่นกัน เช่นเดียวกับการ Delete หรือไม่มีทางที่จะทำเช่นนี้ได้ง่าย ๆ หรือไม่?