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/delete | malloc/free |
|---|---|---|
| Constructor/Destructor | เรียกอัตโนมัติ | ไม่เรียก |
| Type Safety | มี | ไม่มี (void*) |
| Error Handling | Exception | NULL Return |
| Overloading | รองรับ | ไม่รองรับ |
| Placement New | รองรับ | ไม่รองรับ |
คำแนะนำ
ใน C++ ใช้ new/delete (หรือ Smart Pointers) ใน C ใช้ malloc/free อย่าผสมใช้ (เช่น malloc แล้ว delete - Undefined Behavior)