unique_ptr使用lambda的问题

虚空大鸟 2015-12-20 03:43:08
刚学习到用智能指针,想问一下向unique_ptr传递删除器可以使用lambda表达式吗,如果可以,lambda表达式类型是什么呢?
...全文
283 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iyomumx 2016-01-02
  • 打赏
  • 举报
回复
lambda表达式是一个对象,转成函数指针是不可能的 不过可以用std::function
std::unique_ptr<int, std::function<void(int*)>> ptr(new int[5], [](int * p) { delete[] p; });
zhizhuode 2016-01-02
  • 打赏
  • 举报
回复
unique是支持lambda表达式比如 unique_ptr<int,void(*)(int*)>ptr(new int(1),[](int *p){delete p;}); 只是不能有捕获变量如果有捕获的变量的话要支持lambda 就要用的std::function讲上面例子中的函数指针换成function(void(int *))就可以了
fefe82 2015-12-21
  • 打赏
  • 举报
回复
引用 4 楼 wx199308 的回复:
[quote=引用 3楼我是你的主体 的回复:][quote=引用 2楼fefe82 的回复:]auto deleter = [](T* p){delete p;}; std::unique_ptr<T, decltype(deleter)> up(new T, deleter); 大概这样吧 ...
验证了,没问题,但和我想的有点不一样,请问能直接使用lambda表达式而不使用前面那一句auto表达式吗?[/quote]是不是因为lambda想要进行调用运算必须使用定义一个可调用变量这种方式。[/quote] 那句 auto 主要是为了后面 decltype 取出其类型。 每一个 lambda 表达式都有一个独立的类型。这个类型大概只能通过 decltype 拿到。 其实,另一种方案是用函数指针: std::unique_ptr<T, void(*)(T*)> p(new T, [](T*tp){delete tp;}); // 这个也没试过 ...
虚空大鸟 2015-12-20
  • 打赏
  • 举报
回复
引用 3楼我是你的主体 的回复:
[quote=引用 2楼fefe82 的回复:]auto deleter = [](T* p){delete p;}; std::unique_ptr<T, decltype(deleter)> up(new T, deleter); 大概这样吧 ...
验证了,没问题,但和我想的有点不一样,请问能直接使用lambda表达式而不使用前面那一句auto表达式吗?[/quote]是不是因为lambda想要进行调用运算必须使用定义一个可调用变量这种方式。
虚空大鸟 2015-12-20
  • 打赏
  • 举报
回复
引用 2楼fefe82 的回复:
auto deleter = [](T* p){delete p;}; std::unique_ptr<T, decltype(deleter)> up(new T, deleter); 大概这样吧 ...
验证了,没问题,但和我想的有点不一样,请问能直接使用lambda表达式而不使用前面那一句auto表达式吗?
fefe82 2015-12-20
  • 打赏
  • 举报
回复
auto deleter = [](T* p){delete p;}; std::unique_ptr<T, decltype(deleter)> up(new T, deleter); 大概这样吧 ...
虚空大鸟 2015-12-20
  • 打赏
  • 举报
回复
顶一下,求帮助

33,321

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧