C++11 为什么async()在临时变量上写入而不发生崩溃
这是我编写的一些代码,用于在临时变量上测试async()wirte。 函数测试使用async()执行函数write_a(a*a),并使用future.wait_for()将结果等待一段时间。如果超时,测试返回,a2将同时被释放,因为它是在堆栈上分配的。在A*A上写一写就会崩溃。但事实上,该程序运行良好。为什么异步执行的函数write_A可以写入释放的堆栈临时变量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) {
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
函数在test
,有什么办法吗?非常感谢。@Joey您可以阅读。简短的回答是否,您不能中断async任务的执行。
A a2;
future<int> fut = async(launch::async, write_A, &a2);