Sobes.tech
Junior — Middle

Unique_ptr ishlatilganda deleter orqali ob'ektni qanday o'chirish amalga oshiriladi?

sobes.tech AI

AIdan javob

std::unique_ptr ishlatilganda, boshqarilayotgan ob'ektni o'chirish maxsus obyekt — deleter (o'chiruvchi) orqali amalga oshiriladi. Standart holatda, bu std::default_delete<T> bo'lib, u delete operatorini ishlatadi.

Agar unique_ptr yaratishda o'zingizning deleteringizni bersangiz, u unique_ptr yo'q qilinayotganda chaqiriladi. Deleter — bu chaqiriladigan obyekt (funksiya, funksiya obyekti yoki lambda), u pointerni qabul qiladi va resurslarni to'g'ri ozod qilish uchun javobgardir.

Maxsus deleter bilan misol:

#include <memory>
#include <iostream>

struct MyDeleter {
    void operator()(int* p) const {
        std::cout << "MyDeleter orqali ob'ekt o'chirilmoqda" << std::endl;
        delete p;
    }
};

int main() {
    std::unique_ptr<int, MyDeleter> ptr(new int(42));
    // main dan chiqishda, MyDeleter::operator()(ptr.get()) chaqiriladi
}

Shu tarzda, ob'ekt o'chirish avtomatik ravishda unique_ptr yo'q qilinayotganda amalga oshadi va deleter ob'ektga ishora qiluvchi bilan chaqiriladi.