C++ new and delete

πŸ†•βŒ C++ new and delete

In C++, new and delete are used for dynamic memory managementβ€”that is, allocating and freeing memory at runtime (on the heap).


πŸ”Ή 1. Why new and delete?

  • Size of data not known at compile time

  • Memory needed dynamically (runtime)

  • Manual control over memory (powerful but risky)


πŸ”Ή 2. Using new (Allocate Memory)

Allocate a Single Variable

int *p = new int;
*p = 10;

Or with initialization:

int *p = new int(10);

βœ” Memory allocated on heap
βœ” p stores the address


πŸ”Ή 3. Using delete (Free Memory)

delete p;
p = nullptr;

βœ” Frees heap memory
βœ” Setting to nullptr avoids dangling pointer


πŸ”Ή 4. Complete Example (Single Variable)

#include <iostream>
using namespace std;

int main() {
int *p = new int(25);

cout << *p << endl;

delete p;
p = nullptr;

return 0;
}


πŸ”Ή 5. Dynamic Array Allocation (new[])

int *arr = new int[5];

Initialize dynamically:

for (int i = 0; i < 5; i++) {
arr[i] = i * 10;
}

πŸ”Ή 6. Delete Dynamic Array (delete[])

delete[] arr;
arr = nullptr;

⚠️ Important rule

  • new β†’ delete

  • new[] β†’ delete[]


πŸ”Ή 7. Complete Example (Dynamic Array)

#include <iostream>
using namespace std;

int main() {
int n = 5;
int *arr = new int[n];

for (int i = 0; i < n; i++) {
arr[i] = i + 1;
}

for (int i = 0; i < n; i++) {
cout << arr[i] << " ";
}

delete[] arr;
arr = nullptr;

return 0;
}


πŸ”Ή 8. new vs Stack Allocation

int a = 10; // stack
int *p = new int(10); // heap
Stack Heap
Automatic Manual
Fast Slower
Limited Large
Safe Error-prone

πŸ”Ή 9. Common Mistakes ❌

❌ Memory Leak

int *p = new int(10);
// delete missing

❌ Double Delete

delete p;
delete p; // undefined behavior

❌ Wrong Delete

int *arr = new int[5];
delete arr; // ❌ should be delete[]

βœ” Correct:

delete[] arr;

πŸ”Ή 10. new/delete vs Smart Pointers (Modern C++)

❌ Old style:

int *p = new int(10);
delete p;

βœ” Modern C++:

#include <memory>
auto p = std::make_unique<int>(10);

βœ” Automatic memory management
βœ” No leaks


βœ… Best Practices

  • Always pair new with delete

  • Always pair new[] with delete[]

  • Set pointer to nullptr after delete

  • Prefer smart pointers (unique_ptr, shared_ptr)

  • Avoid raw new/delete in modern C++


πŸ“Œ Summary

  • new allocates memory on heap

  • delete frees allocated memory

  • new[] / delete[] for arrays

  • Incorrect usage leads to memory bugs

  • Prefer smart pointers when possible

You may also like...