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
int* ptr = new int;
*ptr = 35;
cout << *ptr;Tushuntirish:
new int— bitta butun son uchun xotira joyi yaratadiptr— shu joy manzilini saqlaydi*ptr = 35;— 35 sonini saqlaydicout << *ptr;— qiymatni chiqaradi
delete kalit so'zi
new bilan yaratilgan narsani tugatganingizda, uni o'chirishingiz sizning vazifangiz.
Buning uchun delete dan foydalaning:
MISOL
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
#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:
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.
