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