ในบทช่วยสอนนี้ เราจะพูดถึงฟังก์ชัน delete() และ free() ใน C++
ทั้งสองฟังก์ชันใช้เพื่อวัตถุประสงค์หลักเดียวกันคือ การคืนหน่วยความจำที่ไม่ได้ใช้งานแล้ว ความแตกต่างคือ:
delete: ใช้สำหรับหน่วยความจำที่จองด้วยnewfree(): ใช้สำหรับหน่วยความจำที่จองด้วยmalloc()
ตัวอย่างโค้ด
#include <stdio.h>
#include <stdlib.h>
int main() {
int x;
int *ptr1 = &x; // ตัวชี้ไปยังตัวแปรทั่วไป
int *ptr2 = (int*)malloc(sizeof(int)); // จองด้วย malloc
int *ptr3 = new int; // จองด้วย new
int *ptr4 = NULL; // null pointer
// การใช้งาน delete ผิดวิธี
delete ptr1; // ผิด: ptr1 ไม่ได้มาจาก new
delete ptr2; // ผิด: ptr2 มาจาก malloc
// การใช้งาน delete ถูกวิธี
delete ptr3; // ถูก: ptr3 มาจาก new
delete ptr4; // ถูก: delete NULL เป็นการดำเนินการที่ปลอดภัย (no-op)
getchar();
return 0;
}
คำอธิบายเพิ่มเติม
- delete ptr1: ผิด เพราะ ptr1 ชี้ไปที่ตัวแปรบน stack ไม่ใช่ heap
- delete ptr2: ผิด เพราะ ptr2 จองด้วย malloc ต้องใช้ free() แทน
- delete ptr3: ถูกต้อง ใช้คู่กับ new
- delete ptr4: ถูกต้อง และปลอดภัย การ delete null pointer ไม่ทำอะไรเลย
- ใช้
delete[]สำหรับอาร์เรย์ที่จองด้วยnew[]