std::unique_ptr с использованием пользовательского удалителя с несколькими аргументами
Интересно, можно ли указать пользовательское средство удаления для std::unique_ptr с более чем одним аргументом (стандартная подпись средства удаления). Я знаю, что с std::shared_ptr существует обходной путь с std:: bind, который делает это возможным, но существует ли какая-то хитрость для std::unique_ptr?
Мне кажется, что это не потому, что, согласно http://en.cppreference.com/w/cpp/memory/unique_ptr:
Требования к типу -Deleter должен быть FunctionObject или lvalue-ссылкой на FunctionObject или lvalue-ссылкой на функцию, вызываемой с помощью аргумента типа unique_ptr::pointer
1 ответ
Решение
void my_free(int* p, int x, int y){
std:: cout << x << " " << y << "\n";
}
int main()
{
auto my_deleter = std::bind(my_free, std::placeholders::_1, 1, 2) ;
auto my_lambda = [](int* t) { my_free(t, 3, 4); };
std::unique_ptr<int, decltype(my_deleter)> ptr(new int, my_deleter);
std::unique_ptr<int, decltype(my_lambda)> ptr2(new int, my_lambda);
return 0;
}