ตัว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จะได้รับจำนวนองค์ประกอบที่จะยกเลิกการจัดสรร