gpt4 book ai didi

c++ - lambda 中缺少引用参数

转载 作者:行者123 更新时间:2023-11-28 00:07:31 25 4
gpt4 key购买 nike

我正在获取文件的数据作为字节 block 队列( vector )。并且需要启动一个线程来将这些数据转储到文件中。没有线程代码工作正常(如果将 lambda 主体放入函数本身)。但是对于 lambda 线程函数,它不起作用。

首先 - lambda 内部的路径是空的,while(!one_file.empty()) 即使队列的大小不为零也推迟循环体。

参数传递和捕获有什么问题?

std::thread dump_to_file(std::string path,  std::queue<std::vector<char>>&& one_file) {
return std::thread {[&]() {
std::ofstream out((path + ".bak").c_str());
while (!one_file.empty()) {
std::copy(one_file.front().begin(), one_file.front().end(), std::ostream_iterator<char>(out));
one_file.pop();
}
}};
}

最佳答案

您正在捕获对函数局部变量的引用。当您从函数返回时,path 超出范围,因此现在您的 lambda 指的是一个已销毁的对象。如果您改为按值捕获 ([=]),则变量将保留在 lambda 对象中。

您还可以通过引用将这两个变量传递给函数,然后您可以通过引用捕获它们,因为它们仍然存在于 dump_to_file 的调用站点

关于c++ - lambda 中缺少引用参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34682672/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com