如何解决调用方堆栈无效后,回调func引用的调用方本地变量如何?
我认为以下代码由于本地变量“不可用”而可能存在潜在问题,行为是否应定义?
class foo {
public:
foo(){
std::cout << "foo constructed" << std::endl;
}
~foo(){
std::cout << "foo destructed" << std::endl;
}
int val;
};
void do(std::function<void()> func) {
// let other thread to invoke func
dispatch_async(conqueue,^{
sleep(5); // wait 5s for testLocalRef return,so all local variable should be invalid due to stack popup?
func();
});
}
void testLocalRef() {
auto res = true; // local variable
foo fo; // local variable
std::function<void()> func = [&res,&fo] () {
res = false; // invalid? the behavior is undefined?
fo.val = 10; // invalid? the behavior is undefined?
std::cout << "callback"<<std::endl;
};
do(func); // return immediately
}
int main(int argc,const char * argv[]) {
conqueue = dispatch_queue_create("MyConcurrentDiapatchQueue",disPATCH_QUEUE_CONCURRENT);
testLocalRef();
// other function calls in order to use the stack
// ...
CFRunLoopRun(); // no return
}
能请你帮我吗?预先感谢!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。