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;
}
Другие вопросы по тегам