Junior — Middle
Как се извършва изтриването на обект чрез deleter при използване на unique_ptr?
sobes.tech AI
Отговор от AI
При използване на std::unique_ptr, премахването на управлявания обект става чрез специален обект, наречен deleter (изтривател). По подразбиране това е std::default_delete<T>, който извиква оператора delete за указателя.
Ако при създаването на unique_ptr се подаде собствен deleter, то при унищожаването на unique_ptr именно той ще бъде извикан. Deleter е извикваем обект (функция, функционален обект или лямбда), който приема указател и отговаря за правилното освобождаване на ресурсите.
Пример с потребителски 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 с указател към обекта.