我有一个线程,它会为它产生的每个作业获取一些本地数据。我想检查是否可以通过引用“局部变量”来传递给作业(仿函数)
例如,
ThreadPool tp;
void func(){
Employee emp;
tp.enqueueJob(bind(&foo,emp));
}
void foo(const Employee &emp){
//Access emp when the job is executed.
}
所以,问题是,根据标准,我可以保证在控件超出Employee
后从foo
执行作业时可以访问func
记录吗? / p>
我知道假设一旦我们离开块就可以访问局部变量是不安全的,但只是想检查一下,因为有些编译器允许将局部变量作为const引用返回。
答案 0 :(得分:2)
bind(&foo,emp)
它接受emp
的副本,并将该函数作为参数调用。
如果这就是你想要的,那么一切都很好。如果您希望该函数对emp
本身起作用,那么您需要:
bind(&foo, std::ref(emp))