考虑这个有效的代码,我打算将资源移动到新线程:
void Func1(std::ofstream* f) {
std::unique_ptr<std::ofstream> file(f);
*file << "This is working" << std::endl;
}
int Func2() {
std::unique_ptr<std::ofstream> file(new std::ofstream("output.txt"));
std::thread t1(&Func1, file.release());
t1.detach();
return 0;
}
int main() {
Func2();
std::cin.get();
return 0;
}
由于我找不到跨越线程边界移动资源的方法,所以我必须传递一个普通的指针。
这是要走的路吗?全局变量会更好地处理资源吗?
是的,我可以传递文件名并在Func1中打开它,但问题对于任何不应复制的类都是通用的。
答案 0 :(得分:3)
void Func1(std::unique_ptr<std::ofstream> file) {
*file << "This is working" << std::endl;
}
int Func2() {
std::unique_ptr<std::ofstream> file(new std::ofstream("output.txt"));
std::thread t1(&Func1, std::move(file));
t1.detach();
return 0;
}