[英]C++ lambda function cause memory leak
int AsyncUpdator::EnqueueTask(TaskInfo task_info) {
- auto task = [=] {
- this->DoTask(task_info);
- };
+ auto task = std::bind(AsyncUpdator::DoTask, task_info);
return 0;
}
struct TaskInfo {
GetRequest get_request; // this is a protobuffer structure
uint64_t log_id;
};
读取线会导致问题,但绿线不会?
在第一个选项中auto task = [=] () {};
正在捕获局部变量作为副本,但std::bind
将您的task_info
作为右值引用捕获,并使用转发将其作为引用传递到您的函数中。
如果您不想使用std::bind
切换 Lamba 以通过引用捕获,例如auto task = [&] () {};
.
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.