Sobes.tech
Назад к вопросам
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, вызывая делетер с указателем на объект.