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 е извикваем обект (функция, функционален обект или лямбда), който приема указател и отговаря за правилното освобождаване на ресурсите.

Пример с потребителски 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 с указател към обекта.