Не очень могу понять, что происходит в этом коде.
Нужно создать свой deleter, для умного указателя. В итоге нашел этот код, как ответ на stackoverflow, но он не работает для меня.
Есть две функции в области видимости файла:
Widget* create()
{
return new Widget();
}
void destroy(Widget* wid)
{
cout << "I'm inside of deleter" << endl;
delete wid;
}
И сам класс Widget:
class Widget
{
public:
std::unique_ptr<Widget, void(*)(Widget*)> ptr_;
Widget() : ptr_(create(), destroy)
{
}
~Widget()
{
cout << "Widget destructor called! Memory deallocated." << endl;
}
};
1) Как теперь этим пользоваться?
2) Что это за конструкция void(*)(Widget*)?
3) Как понять такой конструктор Widget() : ptr_(create(), destroy)?
Странный вопрос. Зачем-то же вы этот код искали? Получается примерно - как обращение к доктору: я тут нашел какие-то таблетки, как их принимать? Доктор может сказать дозировку, но вы уверены в наличии болезни? :)
Тип, представляющий собой указатель на функцию, принимающую параметр Widget* и возвращающую void.
Конструктор с пустым телом {}, инициализирующий поле ptr_ путем вызова соответствующего конструктора (в данном случае - конструктора для std::unique_ptr<Widget, void(*)(Widget*)>, с передачей ему в качестве аргументов результата вызова create() и указателя на функцию destroy.
P.S. Чтобы правильно задать вопрос, нужно знать половину ответа. (с) Шекли
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости