簡體   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