ตัวdelete[]
ดำเนินการใช้เพื่อลบอาร์เรย์ ตัวdelete
ดำเนินการใช้เพื่อลบวัตถุที่ไม่ใช่อาร์เรย์ มันเรียกใช้operator delete[]
และoperator delete
ฟังก์ชันตามลำดับเพื่อลบหน่วยความจำที่อาร์เรย์หรืออ็อบเจ็กต์ที่ไม่ใช่อาร์เรย์ครอบครองหลังจาก (ในที่สุด) เรียกตัวทำลายสำหรับองค์ประกอบของอาร์เรย์หรือวัตถุที่ไม่ใช่อาร์เรย์
ต่อไปนี้แสดงความสัมพันธ์:
typedef int array_type[1];
// create and destroy a int[1]
array_type *a = new array_type;
delete [] a;
// create and destroy an int
int *b = new int;
delete b;
// create and destroy an int[1]
int *c = new int[1];
delete[] c;
// create and destroy an int[1][2]
int (*d)[2] = new int[1][2];
delete [] d;
สำหรับสิ่งnew
ที่สร้างอาร์เรย์ (ดังนั้นnew type[]
หรือnew
ใช้กับโครงสร้างชนิดอาร์เรย์) Standard จะค้นหาoperator new[]
ในคลาสประเภทองค์ประกอบของอาร์เรย์หรือในขอบเขตส่วนกลางและส่งผ่านจำนวนหน่วยความจำที่ร้องขอ มันอาจร้องขอมากกว่าที่N * sizeof(ElementType)
มันต้องการ (เช่นเพื่อเก็บจำนวนองค์ประกอบดังนั้นในภายหลังเมื่อลบจะรู้ว่ามีการเรียกตัวทำลายล้างกี่ครั้งให้ทำ) หากคลาสประกาศoperator new[]
เพิ่มเติมว่าจำนวนหน่วยความจำยอมรับอีกsize_t
พารามิเตอร์ที่สองนั้นจะได้รับจำนวนองค์ประกอบที่จัดสรร - อาจใช้สิ่งนี้เพื่อวัตถุประสงค์ใด ๆ ที่ต้องการ (การดีบัก ฯลฯ ... )
สำหรับสิ่งnew
ที่สร้างออบเจ็กต์ที่ไม่ใช่อาร์เรย์จะมองหาoperator new
ในคลาสขององค์ประกอบหรือในขอบเขตส่วนกลาง ผ่านจำนวนหน่วยความจำที่ร้องขอ ( sizeof(T)
เสมอกัน)
สำหรับdelete[]
มันจะดูประเภทคลาสองค์ประกอบของอาร์เรย์และเรียกตัวทำลายของพวกมัน operator delete[]
ฟังก์ชั่นที่ใช้เป็นหนึ่งในชั้นเรียนประเภทขององค์ประกอบหรือถ้าไม่มีใครแล้วในขอบเขตทั่วโลก
สำหรับdelete
ถ้าตัวชี้ที่ส่งผ่านเป็นคลาสพื้นฐานของชนิดของวัตถุจริงคลาสพื้นฐานจะต้องมีตัวทำลายเสมือน (มิฉะนั้นจะไม่ได้กำหนดพฤติกรรม) ถ้าไม่ใช่คลาสพื้นฐานจะมีการเรียกตัวทำลายของคลาสนั้นและoperator delete
ในคลาสนั้นหรือโกลบอลoperator delete
จะถูกใช้ ถ้าคลาสพื้นฐานถูกส่งผ่านไปตัวทำลายของชนิดอ็อบเจ็กต์จริงจะถูกเรียกและสิ่งที่operator delete
พบในคลาสนั้นจะถูกใช้หรือถ้าไม่มีเลยoperator delete
จะเรียกglobal หากoperator delete
ในคลาสมีพารามิเตอร์ชนิดที่สองsize_t
จะได้รับจำนวนองค์ประกอบที่จะยกเลิกการจัดสรร