【问题标题】:std::unique_ptr using custom deleter with few argumentsstd::unique_ptr 使用带有少量参数的自定义删除器
【发布时间】:2016-03-31 22:47:27
【问题描述】:

我想知道是否可以使用多个参数(标准删除器签名)为 std::unique_ptr 指定自定义删除器。我知道 std::shared_ptr 存在 std::bind 的解决方法,这使得它成为可能,但是 std::unique_ptr 存在一些技巧吗?

对我来说似乎不是因为根据http://en.cppreference.com/w/cpp/memory/unique_ptr

类型要求 -Deleter 必须是 FunctionObject 或对 FunctionObject 的左值引用或对函数的左值引用,可使用 unique_ptr::pointer 类型的参数

【问题讨论】:

  • 使用std::bind创建1个参数函数对象传递给std::unique_ptr类型

标签: c++ c++11 unique-ptr


【解决方案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;
}

【讨论】:

    猜你喜欢
    • 2013-03-30
    • 2012-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2015-08-15
    • 2018-01-31
    相关资源
    最近更新 更多