หน้าแรกของฉัน: http://www.tommstudio.com/
ในการเขียนโปรแกรม Delphi เราต้องหลีกเลี่ยงการรั่วไหลของหน่วยความจำโดยถอนการติดตั้งวัตถุทั้งหมด อย่างไรก็ตามหากคุณไม่ระวังในโปรแกรมมันเป็นเรื่องง่ายที่จะยกเลิกวัตถุเดียวกันหลายครั้งซึ่งจะทำให้เกิดข้อผิดพลาดร้ายแรงทำให้แอปพลิเคชันผิดพลาดหรือแม้กระทั่งการชน
โปรดดูโปรแกรมต่อไปนี้:
|
ในตัวอย่างข้างต้นข้อผิดพลาดจะถูกสร้างขึ้นเมื่อดำเนินการกับ button3.free, button2 ถูกยกเลิกเมื่อเรียก button2.free แต่เนื่องจาก button2 เป็นโฮสต์ของ button3 และ button3 ถูกยกเลิกในเวลาเดียวกันข้อผิดพลาดที่เกิดขึ้นอย่างหลีกเลี่ยงไม่ได้ .
เพื่อหลีกเลี่ยงข้อผิดพลาดข้างต้นมีสองวิธี: ก่อนอื่นให้ลบส่วนประกอบทั้งหมดที่โฮสต์ก่อนที่จะถูกลบออก วิธีนี้ง่ายมากเพียงแค่ถ่ายโอน button2.free และ button3 ฟรีในตัวอย่างด้านบน ประการที่สองตั้งค่าตัวแปร button3 เป็น nil ก่อนที่ button3.free จะถูกดำเนินการ ขั้นตอนมีดังนี้:
|
ในโปรแกรมข้างต้นการตั้งค่าปุ่ม 3 เป็น NIL คือการป้องกันไม่ให้แอปพลิเคชันนำหน่วยความจำของวัตถุที่ไม่ได้เปลี่ยนมาใช้ซ้ำ เมื่อเรียกใช้วิธีการของวัตถุอิสระมันจะกำหนดว่าวัตถุนั้นไม่มีหรือไม่ ข้อมูลตารางข้อมูลเสมือนจริงที่เกี่ยวข้องข้อมูลตารางข้อมูล Destroy ไม่ได้ทำการเปลี่ยนแปลงใด ๆ กับที่อยู่หน่วยความจำที่มีวัตถุอยู่ดังนั้นหากคุณทดสอบที่อยู่หน่วยความจำหลังจากการเรียกทำลายมันอาจยังคงใช้ได้ ดังนั้นเมื่อวัตถุถูกเรียกสองครั้งในโปรแกรมโดยไม่ต้องตั้งค่าการอ้างอิงวัตถุเป็น NIL การอ้างอิงวัตถุจะยังคงอ้างถึงที่อยู่หน่วยความจำที่ครอบครองโดยวัตถุก่อนที่จะถอนการติดตั้งซึ่งเป็นเหตุผลสำหรับข้อผิดพลาด
แน่นอนในกระบวนการพัฒนาที่เกิดขึ้นจริงข้อผิดพลาดส่วนใหญ่จะไม่ชัดเจนและการแก้ปัญหาควรได้รับการพิจารณาตามข้อมูลเฉพาะและปัญหาจะไม่ได้รับการแก้ไขโดยการเพิ่มประโยคดังนั้นง่ายๆ ที่นี่ฉันแค่อธิบายแนวคิดการเขียนโปรแกรมซึ่งมีบทบาทในการดึงดูดหยก