2

スレッド モデルに特化したブースト スレッドのラッパーを作成したいと考えています。私の関数は、集約スレッド オブジェクトとしてrun()使用している同じクラスのメンバー関数になります。boost::thread検討:

class Thread {
public:
  Thread(...) : m_thread(&Thread::run, this) {}

private:
  void run() { ... }
  boost::thread m_thread;
};

thisはまだ完全に構築されていないため、これは潜在的に危険です。ただし、によって使用されるオブジェクトのすべてのメンバーがrun()ブースト スレッドの初期化の前に初期化されることを保証できる場合、これは実際に安全であると見なすことができますか?

安全性を保証するために私が考えることができる唯一の回避策は、のコンストラクターで使用できるオブジェクトの完全な構築を保証するサブクラスを持つことですThread:

class Thread {
public:
  Thread(...) : m_impl(...), m_thread(&ThreadImpl::run, &m_impl) {}

private:
  class ThreadImpl {
    ThreadImpl(...) { }
    void run() { ... }
  }

  ThreadImpl m_impl;
  boost::thread m_thread;
};

これを行う一般的な方法はありますか?このThreadImplような些細な問題に対して、このクラスはかなりのオーバーヘッドのように思えます。

4

1 に答える 1