Skip to content

new va delete

new kalit so'zi

new kalit so'zi xotirani o'zingiz boshqarish imkonini beradi.

Quyidagi misolda new yordamida butun son uchun xotira joyi yaratamiz, unga 35 qiymatini saqlaymiz va ko'rsatkich orqali chiqaramiz:

MISOL

cpp
int* ptr = new int;
*ptr = 35;
cout << *ptr;

Tushuntirish:

  • new int — bitta butun son uchun xotira joyi yaratadi
  • ptr — shu joy manzilini saqlaydi
  • *ptr = 35; — 35 sonini saqlaydi
  • cout << *ptr; — qiymatni chiqaradi

delete kalit so'zi

new bilan yaratilgan narsani tugatganingizda, uni o'chirishingiz sizning vazifangiz.

Buning uchun delete dan foydalaning:

MISOL

cpp
delete ptr;

Bu C++ ga: "Men bu xotira bilan ishim tugadi, tozalashingiz mumkin" deb aytadi.

ESLATMA — Agar delete ni unutsangiz?

Agar xotirani o'chirishni unutsangiz, dasturingiz ishlayveradi, lekin vaqt o'tishi bilan ko'proq xotira ishlatishi mumkin.

Bu xotira oqishi (memory leak) deyiladi va dasturingizni sekinlashtirishi yoki buzishi mumkin.


Massivlar bilan new va delete

new kalit so'zi yordamida dinamik massivlar ham yaratish mumkin.

ESLATMA

Massivlar uchun new[] va delete[] ishlating. Oddiy o'zgaruvchilar uchun new va delete ishlating.

Dinamik massivlar — massiv o'lchamini oldindan bilmaganingizda foydali, masalan, o'lcham foydalanuvchi kiritishiga bog'liq bo'lganda.

Masalan, mehmonxona misoli — nechta mehmon kelishini bilmagansiz, foydalanuvchidan so'rab, shu miqdorda xona yaratasiz:

MISOL

cpp
#include <iostream>
#include <string>
using namespace std;

int main() {
  int numGuests;
  cout << "Nechta mehmon? ";
  cin >> numGuests;

  // Noto'g'ri kiritishni tekshirish
  if (numGuests <= 0) {
    cout << "Mehmonlar soni kamida 1 bo'lishi kerak.\n";
    return 0;
  }

  // Mehmonlar uchun xotira joyi yaratish (matnlar massivi)
  string* guests = new string[numGuests];

  // numGuests dan keyin qolgan yangi qator belgisini o'tkazish
  cin.ignore();

  // Mehmonlar ismini kiritish
  for (int i = 0; i < numGuests; i++) {
    cout << (i + 1) << "-mehmon ismini kiriting: ";
    getline(cin, guests[i]);
  }

  // Barcha mehmonlarni ko'rsatish
  cout << "\nRo'yxatdan o'tgan mehmonlar:\n";
  for (int i = 0; i < numGuests; i++) {
    cout << guests[i] << "\n";
  }

  delete[] guests; // Xotirani tozalash
  return 0;
}

Qachon new ishlatish kerak?

Ko'p hollarda new ishlatish shart emas. C++ oddiy o'zgaruvchilar uchun xotirani avtomatik boshqaradi:

cpp
int age = 35;
string name = "Ali";

Ammo ba'zan xotirani o'zingiz boshqarishingiz kerak, ayniqsa:

  • Oldindan qancha xotira kerakligini bilmaganingizda
  • Dastur ishlayotgan vaqtda foydalanuvchi kiritishiga qarab xotira yaratmoqchi bo'lsangiz
  • Katta yoki moslashuvchan hajmdagi ma'lumotlarni saqlash kerak bo'lsa
  • Samaradorlik uchun xotirani to'liq nazorat qilmoqchi bo'lsangiz

MASLAHAT

Agar new ishlatsangiz, har doim delete (yoki massivlar uchun delete[]) ishlatishni unutmang — xotira oqishining oldini olish uchun.