Sau*_*ahu 6 c++ multithreading move c++11
来自Anthony Williams的书籍:
以下示例显示了使用std :: move将动态对象的所有权转移到线程中:
Run Code Online (Sandbox Code Playgroud)void process_big_object(std::unique_ptr<big_object>); std::unique_ptr<big_object> p(new big_object); p->prepare_data(42); std::thread t(process_big_object,std::move(p));通过
std::move(p)在std::thread构造函数中指定,首先将所有权big_object转移到新创建的线程的内部存储中,然后转移到内部存储中process_big_object.
我理解堆栈和堆; 任何想法,这个内部存储实际上是什么?
为什么他们不能直接转让所有权process_big_object?
Fra*_*ank 11
这意味着该对象将临时属于该std::thread对象,直到该线程实际启动.
此处的内部存储是指与std::thread对象关联的内存.它可以是成员变量,也可以在构造函数中保存在堆栈中.由于这是依赖于实现的,因此使用一般的和非常规的"内部存储"术语.
线程的所有参数都被复制到std::thread对象持有的某个内部存储器中,因此可以将其传递给线程函数.
std::thread在将所有权传递给实际线程函数之前,该内部存储器由对象拥有.