メンバ関数に使いたいQtConcurrent::run()
のですが、インスタンスへのポインタを使っていないようです。代わりに、デフォルトのコンストラクターが呼び出されているように見えます
#include <QObject>
#include <QDebug>
#include <QtConcurrent>
class Foo : public QObject
{
Q_OBJECT
public:
Foo(int n = 0):n(n){}
Foo(const Foo & f):Foo(f.n){}
void foo(){qDebug() << "Foo " << n;}
void bar(){QtConcurrent::run(this, &Foo::foo);}
private:
int n;
};
void test(){
Foo foo = Foo(2);
foo.foo();
foo.bar();
QtConcurrent::run(&foo, &Foo::foo);
QtConcurrent::run(&foo, &Foo::bar);
}
実行結果は次のtest()
とおりです。
Foo 2
Foo 0 // Should be a 2
Foo 0 // Should be a 2
Foo 0 // Should be a 2
編集:私のインスタンスは確かに範囲外になりました。このコードは正常に動作します
void test(){
Foo * foo = new Foo(2);
foo->foo();
foo->bar();
QtConcurrent::run(foo, &Foo::foo);
QtConcurrent::run(foo, &Foo::bar);
}