私は実験しstd::async
ていて、そのようなコードになりました:
class obj {
public:
int val;
obj(int a) : val(a) {
cout << "new obj" << endl;
}
~obj() {
cout << "delete obj" << endl;
}
};
void foo(obj a) {
this_thread::sleep_for(chrono::milliseconds(500));
cout << a.val << endl;
}
int main(int argc, int **args) {
obj a(5);
auto future = async(foo, a);
future.wait();
return 0;
}
結果は次のとおりです。
new obj
delete obj
delete obj
delete obj
5
delete obj
delete obj
delete obj
次に、次のように変更しようとしvoid foo(obj a)
ましたvoid foo(obj &a)
:
new obj
delete obj
delete obj
delete obj
5
delete obj
delete obj
この単純なコードに対してオブジェクトのコピーが 5 つ作成されるのはなぜですか? 私は認めざるを得ません、私は本当に混乱しています。誰かがこれを説明してくれませんか?
編集
私はVS2012を使用しています