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

ความแตกต่างระหว่าง new/delete และ malloc/free ใน C/C++

new / delete (C++)

  • Operator (ไม่ใช่ฟังก์ชัน) เรียก Constructor/Destructor อัตโนมัติ
  • Type-safe ส่งคืน Pointer ประเภทที่ถูกต้อง
  • โยน Exception (std::bad_alloc) หากจองไม่สำเร็จ
  • รองรับ Overloading และ Placement New
  • delete สำหรับเดี่ยว, delete[] สำหรับอาเรย์

ตัวอย่าง

int *ptr1 = new int;
float *ptr2 = new float(299.121);
int *ptr3 = new int[28];
// ... ใช้งาน ...
delete ptr1;
delete ptr2;
delete[] ptr3;

malloc / free (C)

  • ฟังก์ชันไลบรารี (<stdlib.h>) ไม่เรียก Constructor/Destructor
  • ส่งคืน void* ต้อง Cast เอง
  • ส่งคืน NULL หากล้มเหลว
  • ไม่รองรับ Overloading

ตัวอย่าง

int *p = (int*) malloc(n * sizeof(int));
// ... ใช้งาน ...
free(p);

ตารางเปรียบเทียบ

คุณสมบัติnew/deletemalloc/free
Constructor/Destructorเรียกอัตโนมัติไม่เรียก
Type Safetyมีไม่มี (void*)
Error HandlingExceptionNULL Return
Overloadingรองรับไม่รองรับ
Placement Newรองรับไม่รองรับ

คำแนะนำ

ใน C++ ใช้ new/delete (หรือ Smart Pointers) ใน C ใช้ malloc/free อย่าผสมใช้ (เช่น malloc แล้ว delete - Undefined Behavior)