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 ajratamiz, unga 35 qiymatini saqlaymiz va uni ko‘rsatkich orqali chiqaramiz:
Tushuntirish:
new intbitta butun son uchun xotira joyi ajratadiptrshu joyning manzilini saqlaydi*ptr = 35;35 sonini saqlaydicout << *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:
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
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!
