#include <pthread.h>
class C {
private:
int a;
pthread_t id;
int getA() {return a;}
static void* threadFunction(void* arg) {((C*)arg)->getA();return 0;}
public:
C() {
a=2;
pthread_create(&id,NULL,threadFunction,this);
}
~C() {pthread_join(id,NULL);}
};
int main(int argc, char** argv) {
C c;
}
上記のコードは安全な/定義された/良い方法ですか?"this"をコンストラクタで使用してスレッドを安全に開始できますか?
コンストラクタが返された後にスレッドを開始する必要がありますか?
コンストラクタの 'this'は問題ではありません。問題は 'threadFunction'の' getA() '呼び出しです。まだ生存していない(そのコンストラクタがまだ返されていない)オブジェクトのメンバ関数を呼び出しています。コンストラクタ内からメンバ関数を呼び出すことはできますが、メンバ関数が依存するすべてのクラス不変条件がコール時に確立されているのはあなたの責任です。 –
"メンバー関数が依存するすべてのクラス不変式"。これはクラスのメンバ変数ですか(int aなど)? –