C++ da Smart Pointerlar
Bu sayfa henüz Türkçe diline çevrilmedi — orijinal (Özbekçe) metin gösteriliyor.
Smart Pointerlar - bu dynamically allocated memoryʼni avtomatik boshqaruvchi obyektlar hisblanadi. Ular **C++ Standard Library** tomonidan taqdim etiladi va dinamik yaratilgan obyektlarning lifetime’ini boshqarishga yordam beradi.
- Agar boshqarilayotgan obyekt qaytib kerak bölmaydigan bölsa, unga tegishli xotirani avtomatik ravishda bo‘shatadi.
- Memory leak va dangling pointer kabi xotira bilan bog‘liq muammolarni kamaytirishga yordam beradi.
- C++ Standard Library’dagi
<memory>headeristd::unique_ptr,std::shared_ptrvastd::weak_ptrkabi smart pointerʼlarni taqdim etadi.
misol: Raw Pointer bilan yuzzaga keladigan muammo (Memory leakʼga misol)
cpp
#include <iostream>using namespace std;int main() { int* ptr = new int(10); cout << *ptr; // delete ptr; // -> xotirani bo'shatish uchun talab qilinadi return 0;}Natija:
10Tushuntirish:
new int(10)xotiradan dinamik ravishda joy ajratadi va unga10qiymatini yozadi.- Ajratilgan xotira
deleteorqali aniq bo‘shatilmaguncha band holatda qoladi. deletechaqirishni unutish memory leak yuzaga kelishiga olib kelishi mumkin.- Smart pointerlar esa bunday xotirani avtomatik boshqarishga yordam beradi.
Smart Pointerʼlarning sintaksi
Smart pointerlar template class hisoblanadi. Shu sababli ular boshqaradigan obyekt turi burchakli qavslar (<,>) ichida ko‘rsatiladi.
smart_pointer_type<data_type> pointer_name;Masalan:
unique_ptr<int> ptr;shared_ptr<int> ptr;weak_ptr<int> ptr;Smart Pointerlarning turlari
C++ uchta keng tarqalgan smart pointerʼlarni taqdim etadi:
1. auto_ptr (eskirgan)
auto_ptr — C++ dagi dastlabki smart pointerʼlardan biri bo‘lib, boshqarayotgan obyektini scope’idan chiqqanda avtomatik ravishda o‘chirardi.
- Ownership boshqa pointerga ko‘chiriladi, natijada asl pointer bo‘sh (
null) holatda qoladi. - Uning copy semantics xatti-harakati xavfli va xatolarga moyil hisoblanadi.

cpp
#include <iostream>#include <memory>using namespace std;int main() { auto_ptr<int> ptr1(new int(10)); cout << *ptr1 << endl; auto_ptr<int> ptr2 = ptr1; // ownership transfer cout << *ptr2; return 0;}# C++ da Smart Pointerlar**Author:** cgoSmart Pointerlar - bu [!Dynamically allocated memory|dynamically allocated memory]ʼni avtomatik boshqaruvchi obyektlar hisblanadi. Ular `**C++ Standard Library**` tomonidan taqdim etiladi va dinamik yaratilgan obyektlarning lifetime’ini boshqarishga yordam beradi.- Agar boshqarilayotgan obyekt qaytib kerak bölmaydigan bölsa, unga tegishli xotirani avtomatik ravishda bo‘shatadi.- [!Memory leak] va [!Dangling pointer|dangling pointer] kabi xotira bilan bog‘liq muammolarni kamaytirishga yordam beradi.- **C++ Standard Library’dagi** `<memory>` **headeri** `std::unique_ptr`, `std::shared_ptr` va `std::weak_ptr` kabi **smart pointerʼ**larni taqdim etadi.**misol:** [!Raw pointer|Raw Pointer] bilan yuzzaga keladigan muammo (**Memory leak**ʼga misol)```cpp#include <iostream>using namespace std;int main() { int* ptr = new int(10); cout << *ptr; // delete ptr; // -> xotirani bo'shatish uchun talab qilinadi return 0;}```**Natija:**```text10```**Tushuntirish:**- `new int(10)` xotiradan dinamik ravishda joy ajratadi va unga `10` qiymatini yozadi.- Ajratilgan xotira `delete` orqali aniq bo‘shatilmaguncha band holatda qoladi.- `delete` chaqirishni unutish memory leak yuzaga kelishiga olib kelishi mumkin.- Smart pointerlar esa bunday xotirani avtomatik boshqarishga yordam beradi.#### Smart Pointerʼlarning sintaksiSmart pointerlar template class hisoblanadi. Shu sababli ular boshqaradigan obyekt turi burchakli qavslar (`<,>`) ichida ko‘rsatiladi.```textsmart_pointer_type<data_type> pointer_name;```**Masalan:**```textunique_ptr<int> ptr;shared_ptr<int> ptr;weak_ptr<int> ptr;```### Smart Pointerlarning turlariC++ uchta keng tarqalgan **smart pointer**ʼlarni taqdim etadi:#### 1. auto_ptr (eskirgan)**auto_ptr** — **C++** dagi dastlabki **smart pointer**ʼlardan biri bo‘lib, boshqarayotgan obyektini scope’idan chiqqanda avtomatik ravishda o‘chirardi.- [!Ownership] boshqa pointerga ko‘chiriladi, natijada asl pointer bo‘sh (`null`) holatda qoladi.- Uning [!Copy semantics|copy semantics] xatti-harakati xavfli va xatolarga moyil hisoblanadi.```cpp#include <iostream>#include <memory>using namespace std;int main() { auto_ptr<int> ptr1(new int(10)); cout << *ptr1 << endl; auto_ptr<int> ptr2 = ptr1; // ownership transfer cout << *ptr2; return 0;}```