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 бо ишорагард ба объект.