繁体   English   中英

C++ lambda 函数导致内存泄漏

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM