0

移動コンストラクターのBoost.Threadライブラリー仕様は、

コンストラクターの移動:

効果:他の(存在する場合)によって管理されているスレッドの所有権を、新しく構築されたboost::threadインスタンスに譲渡します。

一方、ムーブ代入の場合:

other(存在する場合)によって管理されているスレッドの所有権を*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

これはmove - constructorです-オブジェクトがちょうど存在するようになった場合、前の所有者はどのようになることができますか?

于 2011-05-26T07:21:24.337 に答える
3

違いは、move構築時に、新しいスレッドオブジェクトが以前は存在しなかったため、以前のスレッドがないことです。

割り当てを移動するときは、2つのスレッドオブジェクトで開始し、そのうちの少なくとも1つが空で終了します。

于 2011-05-26T07:21:42.843 に答える