std::thread メンバーを持つ移動可能なコピー不可能なクラスがあります。
クラス デストラクタが実行されたら、クリーンアップ作業を行ってスレッドに参加する必要があります。クラスが移動された場合、デストラクタがクリーンアップとスレッドの結合をスキップする必要があります。移動元の bool を格納することでこれを達成できますが、それは少し無駄に思えます。
std::thread メンバーが移動された場合、このクラス インスタンスが移動されたことがわかります。std::thread メンバーが移動されたかどうかを確認することは可能ですか?
class Widget
{
Widget()
{
// initialize
}
Widget( Widget&& rhs )
{
t = std::move(rhs.t);
}
~Widget()
{
if ( t_is_not_moved_from() )
{
// do cleanup
t.join();
}
}
inline friend void swap( Widget& lhs, Widget& rhs )
{
lhs.t.swap( rhs.t );
}
private:
std::thread t;
// noncopyable
Widget( const Widget& );
const Widget& operator=( const Widget& );
};