ทุกครั้งที่มีคนถามคำถามเกี่ยวกับ delete[]
ที่นี่ มันก็มักจะมีคำถามทั่วไปอยู่เสมอว่า C++ ทำอย่างไร ให้ใช้ delete[]
การตอบกลับ มาจากพื้นหลังของ vanilla C สิ่งที่ฉันไม่เข้าใจคือเหตุใดจึงต้องมีการร้องขอที่แตกต่างออกไปเลย
ด้วย malloc()
/free()
ตัวเลือกของคุณคือรับตัวชี้ไปยังบล็อกหน่วยความจำที่อยู่ติดกัน และเพิ่มบล็อกหน่วยความจำที่อยู่ติดกัน มีบางอย่างในการดำเนินการเกิดขึ้นและรู้ว่าบล็อกที่คุณจัดสรรนั้นมีขนาดเท่าใดตามที่อยู่ฐาน สำหรับเวลาที่คุณต้องปลดปล่อยมัน
ไม่มีฟังก์ชัน free_array()
ฉันเคยเห็นทฤษฎีบ้าๆ บางอย่างในคำถามอื่นๆ ที่เกี่ยวข้องกับเรื่องนี้ เช่น การเรียก delete ptr
จะปล่อยเฉพาะส่วนบนสุดของอาร์เรย์เท่านั้น ไม่ใช่ทั้งอาร์เรย์ หรือที่ถูกต้องกว่านั้นคือไม่ได้ถูกกำหนดโดยการดำเนินการ และแน่นอนว่า... ถ้านี่เป็นเวอร์ชันแรกของ C++ และคุณมีตัวเลือกการออกแบบแปลกๆ ที่สมเหตุสมผล แต่เหตุใดมาตรฐาน C++ ของ $PRESENT_YEAR
จึงไม่โอเวอร์โหลด???
ดูเหมือนว่าจะเป็นบิตพิเศษเพียงอย่างเดียวที่ C++ เพิ่มคือการผ่านอาร์เรย์และการเรียกตัวทำลาย และฉันคิดว่านี่อาจเป็นจุดสำคัญของมัน และแท้จริงแล้วมันกำลังใช้ฟังก์ชันแยกต่างหากเพื่อช่วยเราในการค้นหาความยาวรันไทม์ครั้งเดียว หรือ nullptr
ในตอนท้ายของรายการเพื่อแลกกับการทรมานโปรแกรมเมอร์หรือโปรแกรมเมอร์ C++ ใหม่ทุกคนที่มีวันคลุมเครือและลืมไปว่ามีคำสงวนที่แตกต่างกัน
ใครช่วยอธิบายให้ชัดเจนสักครั้งได้ไหมหากมีเหตุผลนอกเหนือจากนั่นคือสิ่งที่มาตรฐานบอกและไม่มีใครสงสัยเลย