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.