0

用于移动构造函数的 Boost.Thread 库规范说明了

移动构造函数:

效果:将由其他(如果有)管理的线程的所有权转移到新构造的 boost::thread 实例。

而对于移动分配:

将由其他(如果有)管理的线程的所有权转移到 *this。如果之前有一个线程与 *this 关联,则该线程被分离。

显然,对于移动分配,它明确指出先前的线程对象变得分离。

由于 boost::thread 对象的复制尚未定义,并且只能移动所有权,这是否意味着使用 Move Constructor 之前的所有者线程不会分离?

或者这仅仅是一个文档疏忽?

4

3 回答 3

6

你误会了。标记您的线程对象 A 和 B,以及实际的线程 T。

如果 B 拥有 T,则从 B 构造 A 意味着 A 现在拥有 T,而 B 一无所有。
如果 B 拥有 T,则从 B 分配 A 意味着 A 现在拥有 T,而 B 什么都没有,并且 A 之前拥有的任何东西都不属于任何东西(也就是分离的)。

于 2011-05-26T07:22:17.367 回答
4

它是一个移动构造函数——如果对象刚刚出现,之前的所有者会是什么?

于 2011-05-26T07:21:24.337 回答
3

不同的是,move构造时,新的线程对象之前是不存在的,所以没有之前的线程。

移动分配时,您从两个线程对象开始,并以其中至少一个为空结束。

于 2011-05-26T07:21:42.843 回答