[英]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.