new va delete


ULASHISH

new kalit so‘zi

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

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

Misol

int* ptr = new int; *ptr = 35; cout << *ptr;
O‘zingiz sinab ko‘ring »

Tushuntirish:

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

Demak, xotira ajratish uchun new kalit so‘zidan, unga murojaat qilish uchun esa ptr ko‘rsatkichidan foydalandik.


delete kalit so‘zi

new bilan biror narsa yaratganingizda, ish tugagach uni o‘chirish sizning vazifangiz.

Buning uchun delete kalit so‘zidan foydalaning:

Misol

delete ptr;
O‘zingiz sinab ko‘ring »

Bu C++ tiliga quyidagini bildiradi: "Bu xotira bilan ishim tugadi, endi uni tozalab qo‘yishing mumkin."

delete kalit so‘zini unutsangiz nima bo‘ladi?

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

Bu xotira sizib chiqishi (memory leak) deb ataladi va vaqt o‘tishi bilan dasturingizni sekinlashtirishi yoki ishdan chiqarishi mumkin.



new va delete’ni massivlar bilan ishlatish

Dinamik massivlar yaratish uchun ham new kalit so‘zidan foydalanishingiz mumkin.

Eslatma: Massivlar uchun new[] va delete[] ishlating. Yakka o‘zgaruvchilar uchun esa new va delete ishlating.

Dinamik massivlar massiv o‘lchamini oldindan bilmaganingizda foydali — masalan, o‘lcham foydalanuvchi kiritgan ma’lumotga yoki dastur boshida noma’lum bo‘lgan boshqa qiymatlarga bog‘liq bo‘lganda.

Masalan, siz mehmonxona boshqarasiz deb tasavvur qiling. Nechta mehmon kelishini bilmaganingiz uchun foydalanuvchidan ularning sonini so‘raysiz va shuncha xona yaratasiz — har bir mehmonning ismini saqlash uchun bittadan:

Misol

#include <iostream> #include <string> using namespace std; int main() {   int numGuests;   cout << "How many guests? ";   cin >> numGuests;   // Check for invalid input   if (numGuests <= 0) {     cout << "Number of guests must be at least 1.\n";     return 0;   }   // Create memory space for x guests (an array of strings)   string* guests = new string[numGuests];   // Ignore the leftover newline character after reading numGuests   cin.ignore();   // Enter guest names   for (int i = 0; i < numGuests; i++) {     cout << "Enter name for guest " << (i + 1) << ": ";     getline(cin, guests[i]); // Read the full name (including spaces)   }   // Show all guests   cout << "\nGuests checked in:\n";   for (int i = 0; i < numGuests; i++) {     cout << guests[i] << "\n";   }   delete[] guests; // Clean up memory   return 0; }

Natija namunasi:

How many guests? 3
Enter name for guest 1: John Doe
Enter name for guest 2: Liam Spurs
Enter name for guest 3: Jenny Kasp
Guests checked in:
John Doe
Liam Spurs
Jenny Kasp
Misolni ishga tushirish »

new qachon ishlatiladi

Ko‘p hollarda new ishlatishingiz shart emas. C++ quyidagi kabi oddiy o‘zgaruvchilar uchun xotirani avtomatik boshqaradi:

int age = 35; string name = "John";

Lekin ba’zan xotirani o‘zingiz boshqarishingizga to‘g‘ri keladi — ayniqsa quyidagi hollarda:

  • Qancha xotira kerak bo‘lishini oldindan bilmasangiz (masalan, nechta mehmon yoki ball bo‘lishini)
  • Dastur ishlayotgan paytda foydalanuvchi kiritgan ma’lumotga qarab xotira ajratmoqchi bo‘lsangiz
  • Katta yoki o‘zgaruvchan hajmdagi ma’lumotlarni saqlashingiz kerak bo‘lsa
  • Xotira ustidan to‘liq qo‘lda nazorat qilishni istasangiz (masalan, unumdorlik muhim bo‘lgan kodda)

Bunday hollarda new xotira ajratishga, delete esa ish tugagach uni tozalashga yordam beradi.

Maslahat: Agar new ishlatsangiz, xotira sizib chiqishining oldini olish uchun delete (massivlar uchun esa delete[]) ishlatishni doim yodda tuting.




W3Schools Pathfinder

Yutuqlaringizni kuzating – bu bepul!