2015-12-26 2 views
3

Интересно, можно ли указать пользовательский deleter для std :: unique_ptr с несколькими аргументами (стандартная сигнатура делетера). Я знаю, что с std :: shared_ptr существует обходной путь с помощью std :: bind, который делает возможным, но является трюком для std :: unique_ptr существует?std :: unique_ptr с использованием пользовательского делетера с несколькими аргументами

Для меня кажется, что это не потому, что в соответствии с http://en.cppreference.com/w/cpp/memory/unique_ptr:

требования Типа -Deleter должен быть функциональным объект или именующей ссылка на функциональный объект или Lvalue ссылку на функцию, вызываемую с аргументом типа unique_ptr: : указатель

+2

использование 'станд :: bind' создать 1 аргумент объекта функции передать в' станд :: unique_ptr' типа – Danh

ответ

5
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; 
} 
+0

Спасибо, это работает. –

 Смежные вопросы

  • Нет связанных вопросов^_^