การรวบรวมขยะนั้นหมายถึงว่าวัตถุที่คุณจัดสรรจะถูกปล่อยออกมาโดยอัตโนมัติเมื่อถึงจุดที่ไม่สามารถเข้าถึงได้อีกต่อไป
ถูกต้องมากขึ้นพวกเขาจะถูกปล่อยออกมาเมื่อพวกเขาไม่สามารถเข้าถึงโปรแกรมได้เนื่องจากวัตถุที่อ้างอิงเป็นวงกลมจะไม่ถูกปล่อยออกมาอย่างอื่น
พอยน์เตอร์สมาร์ทเพียงอ้างถึงโครงสร้างใด ๆ ที่ทำงานเหมือนตัวชี้ธรรมดา แต่มีฟังก์ชั่นพิเศษบางอย่างแนบมา สิ่งเหล่านี้รวมถึงแต่ไม่ จำกัด เพียงการจัดสรรคืน แต่ยังรวมถึงการคัดลอกเมื่อเขียนเช็คที่ถูกผูกไว้ ...
ขณะนี้ดังที่คุณได้ระบุไว้ตัวชี้อัจฉริยะสามารถใช้เพื่อนำรูปแบบการรวบรวมขยะไปใช้
แต่ขบวนความคิดดำเนินไปในทางต่อไปนี้:
- การเก็บขยะเป็นสิ่งที่ยอดเยี่ยมเพราะสะดวกและฉันต้องดูแลสิ่งต่าง ๆ ให้น้อยลง
- ดังนั้น: ฉันต้องการเก็บขยะในภาษาของฉัน
- ตอนนี้จะนำ GC มาเป็นภาษาของฉันได้อย่างไร
แน่นอนคุณสามารถออกแบบมันได้ตั้งแต่ต้น C # ได้รับการออกแบบมาให้รวบรวมขยะดังนั้นเพียงแค่new
วัตถุของคุณและมันจะถูกปล่อยออกมาเมื่อการอ้างอิงไม่อยู่ในขอบเขต วิธีการทำสิ่งนี้ขึ้นอยู่กับคอมไพเลอร์
แต่ใน C ++ ไม่มีการรวบรวมขยะ หากเราจัดสรรตัวชี้บางส่วนint* p = new int;
และอยู่นอกขอบเขตp
ตัวเองจะถูกลบออกจากสแต็ก แต่ไม่มีใครดูแลหน่วยความจำที่จัดสรร
ตอนนี้สิ่งเดียวที่คุณต้องเริ่มต้นจากการเป็นdestructors กำหนด เมื่อวัตถุออกจากขอบเขตมันถูกสร้างขึ้นในตัวทำลายมันจะถูกเรียก เมื่อรวมกับเทมเพลตและการบรรทุกเกินพิกัดคุณสามารถออกแบบวัตถุห่อหุ้มที่ทำตัวเหมือนตัวชี้ แต่ใช้ฟังก์ชั่น destructor เพื่อล้างทรัพยากรที่แนบมากับมัน (RAII) คุณเรียกนี้ชี้สมาร์ท
นี่คือเฉพาะ C ++ สูงทั้งหมด: การบรรทุกเกินพิกัด, เทมเพลต, destructors, ... ในสถานการณ์เฉพาะภาษานี้คุณได้พัฒนาพอยน์เตอร์อัจฉริยะเพื่อให้ GC ที่คุณต้องการ
แต่ถ้าคุณออกแบบภาษาด้วย GC ตั้งแต่เริ่มต้นนี่เป็นเพียงรายละเอียดการนำไปใช้งาน คุณแค่บอกว่าวัตถุจะถูกล้างและคอมไพเลอร์จะทำสิ่งนี้ให้คุณ
พอยน์เตอร์สมาร์ทเช่นใน C ++ อาจจะไม่สามารถทำได้ในภาษาอย่าง C # ซึ่งไม่มีการทำลายที่กำหนดเลย (C # ทำงานได้โดยการให้น้ำตาล syntactic สำหรับการเรียก.Dispose()
วัตถุบางอย่าง) ในที่สุดทรัพยากรที่ไม่มีการอ้างอิงจะถูกเรียกคืนโดย GC แต่จะไม่ได้กำหนดเมื่อจะเกิดขึ้นอย่างแน่นอน
และในทางกลับกันก็ทำให้ GC สามารถทำงานได้อย่างมีประสิทธิภาพ ถูกฝังลึกในภาษามากกว่าตัวชี้สมาร์ทซึ่งตั้งอยู่ด้านบนของมัน. NET GC สามารถเช่นการดำเนินการหน่วยความจำล่าช้าและดำเนินการในหน่วยบล็อกเพื่อให้ถูกกว่าหรือย้ายหน่วยความจำรอบเพื่อเพิ่มประสิทธิภาพตามวัตถุบ่อย มีการเข้าถึง