C++ new and delete

🔹 تعریف

  • new → برای ایجاد حافظه پویا (Dynamic Memory Allocation) استفاده می‌شود.

  • delete → برای آزاد کردن حافظه‌ای که با new ایجاد شده استفاده می‌شود.

  • کاربرد اصلی: زمانی که اندازه داده در زمان اجرا مشخص است یا داده بزرگ است.

🔹 1️⃣ تخصیص حافظه برای یک متغیر

#include <iostream> using namespace std; int main() { int *ptr = new int; // ایجاد حافظه برای یک int *ptr = 100; // مقداردهی cout << *ptr << endl; // خروجی: 100 delete ptr; // آزاد کردن حافظه }

🔹 2️⃣ تخصیص حافظه برای آرایه

#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 * 2; cout << arr[i] << " "; } delete[] arr; // آزاد کردن حافظه آرایه }

🔹 خروجی: 0 2 4 6 8

⚠️ توجه: برای آرایه‌ها از []delete استفاده کنید، نه فقط delete.

🔹 نکات مهم

  1. هر new باید با delete جفت شود تا Memory Leak رخ ندهد.

  2. حافظه ایجاد شده با new روی Heap ذخیره می‌شود و تا زمان فراخوانی delete باقی می‌ماند.

  3. مقداردهی به pointer بعد از delete نامعتبر است، باید pointer را nullptr کرد:

delete ptr; ptr = nullptr;
  1. در C++11 به بعد می‌توان از smart pointers برای مدیریت خودکار حافظه استفاده کرد:

#include <memory> auto p = std::make_unique<int>(10); // حافظه خودکار آزاد می‌شود