我有以下方法:
each
这是简单的asio截止日期处理程序,可以停止截止时间计时器并允许io_service-run循环继续(从官方的asio超时文档中获取)。
问题是关于函数本身生成的次数。我明白,我从这个方法(std :: function object)返回一个函数对象,它是在运行时动态创建的,但是只创建了一次目标函数?
答案 0 :(得分:1)
lambda体内的代码只会被编译一次,而lambda的闭包对象类型的所有实例都将共享代码。但每次调用deadlineHandler
都会导致创建一个新的闭包类型实例,其成员ec
和this
被初始化,然后创建一个std::function
对象那个例子。
答案 1 :(得分:0)
lambda表达式隐式声明一个仿函数类,并创建它的实例
当然,类的类型(及其operator()
的代码)的生成在编译时完成一次。
每次调用函数时,都会创建此类的新实例(包含lambda捕获的内容) 。