Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> C++

ฟังก์ชัน delete และ free() ใน C++

ในบทช่วยสอนนี้ เราจะพูดถึงฟังก์ชัน delete() และ free() ใน C++

ทั้งสองฟังก์ชันใช้เพื่อวัตถุประสงค์หลักเดียวกันคือ การคืนหน่วยความจำที่ไม่ได้ใช้งานแล้ว ความแตกต่างคือ:

  • delete: ใช้สำหรับหน่วยความจำที่จองด้วย new
  • free(): ใช้สำหรับหน่วยความจำที่จองด้วย 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[]