
266
|
7 章 並行 API
オブジェクト内にムーブするためである(std::thread オブジェクトはコピー不可である点
を思い出して欲しい)。
•
コンストラクタの仮引数の順序は呼び出し側にとって直観的であるように設計した(std::
thread を先に、デストラクト動作を後にした方が、逆にするよりも良い)。しかし、メンバ
初期化の並びはメンバ変数の宣言順序に沿い、std::thread を並びの末尾に置いた。このク
ラスでは順序に意味はないが、一般に、あるメンバ変数の初期化処理が他のメンバ変数に依
存する場合があり、また std::thread オブジェクトが初期化直後に関数の実行を開始する
こともあるため、std::thread オブジェクトはクラスの最後に宣言するのが良い習慣と言え
る。std::thread を末尾に置くことにより、std::thread よりも前に記述したメンバ変数
は、std::thread コンストラクト時にすべて初期化済みであると保証でき、非同期に実行す
るスレッドからもメンバ変数を安全に使用できる。
•
ThreadRAII は get 関数を実装しており、下位に位置する std::thread オブジェクトへアク
セスできる。標準のスマートポインタクラスが持つ raw ポインタへアクセスする get 関数と
同様である。get を提供すれば、ThreadRAII が std::thread のインタフェースをすべて置
き換える必要がなくなり、また、std::thread ...