C++11 为什么async()在临时变量上写入而不发生崩溃

C++11 为什么async()在临时变量上写入而不发生崩溃,c++11,asynchronous,future,C++11,Asynchronous,Future,这是我编写的一些代码,用于在临时变量上测试async()wirte。 函数测试使用async()执行函数write_a(a*a),并使用future.wait_for()将结果等待一段时间。如果超时,测试返回,a2将同时被释放,因为它是在堆栈上分配的。在A*A上写一写就会崩溃。但事实上,该程序运行良好。为什么异步执行的函数write_A可以写入释放的堆栈临时变量 struct A { string name; string address; }; int write_A(A* a) {

这是我编写的一些代码,用于在临时变量上测试async()wirte。 函数测试使用async()执行函数write_a(a*a),并使用future.wait_for()将结果等待一段时间。如果超时,测试返回,a2将同时被释放,因为它是在堆栈上分配的。在A*A上写一写就会崩溃。但事实上,该程序运行良好。为什么异步执行的函数write_A可以写入释放的堆栈临时变量

struct A {
  string name;
  string address;
};

int write_A(A* a) {
  sleep(3);
  a->name = "tractor";
  a->address = "unknow";
  cout <<"write_A return" << endl;
  return 0;
}

void test(A* a) {
   A a2;
  future<int> fut = async(launch::async, write_A, &a2);
  auto status = fut.wait_for(chrono::milliseconds(1000));
  if (status == future_status::ready) {
    int ret = fut.get();
    *a = a2;
    cout <<"succ"<<endl;
  } else {
    cout <<"timeout"<<endl;
  }
}

void test2() {
  A a;
  test(&a);
}

int main ()
{
  test2();
  sleep(5);
  return 0;
}
结构A{ 字符串名; 字符串地址; }; int write_A(A*A){ 睡眠(3); a->name=“拖拉机”; a->address=“unknow”; 不能这个物体

    future<int> fut

当第一个
fut
被删除时,它的析构函数将等待
write_A
完成。然后
a2
被销毁。

可能需要补充的是,它只有在从
std::async
@rafix07返回时才会这样做,谢谢你的回复。我打印了时间戳和一些消息,发现
test
函数在完成时被阻塞ode>fut如您所说发布。如果我想在超时发生时立即返回
test
,有什么办法吗?非常感谢。@Joey您可以阅读。简短的回答是否,您不能中断async任务的执行。
A a2;
future<int> fut = async(launch::async, write_A, &a2);