Sobes.tech
Junior — Middle

Чӣ гуна нест кардани объект тавассути deleter ҳангоми истифодаи unique_ptr?

sobes.tech AI

Ҷавоб аз AI

Ҳангоми истифодаи std::unique_ptr, идорашаванда объектро тоза кардан тавассути объект махсуси номидашуда — deleter (бозгаштгардонанда) сурат мегирад. Ба таври пешфарз, ин std::default_delete<T> аст, ки оператори delete-ро барои ишорагардон даъват мекунад.

Агар дар вақти сохтани unique_ptr deleter-и шахсии худро гузоред, он дар вақти нобуд кардани unique_ptr даъват мешавад. Deleter — ин объекти даъватшаванда (функсия, объекти функсионалӣ ё lambda) мебошад, ки ишорагардро қабул мекунад ва масъул аст барои озод кардани дурусти захираҳо.

Масалан бо deleter-и шахсӣ:

#include <memory>
#include <iostream>

struct MyDeleter {
    void operator()(int* p) const {
        std::cout << "Объект тавассути MyDeleter тоза мешавад" << std::endl;
        delete p;
    }
};

int main() {
    std::unique_ptr<int, MyDeleter> ptr(new int(42));
    // Вақте ки аз main мебарем, MyDeleter::operator()(ptr.get()) даъват мешавад
}

Ин тариқ, тоза кардани объект автоматӣ дар вақти нобуд кардани unique_ptr сурат мегирад, бо даъвати deleter бо ишорагард ба объект.