异步函数调用的参数生存期

时间:2015-07-15 15:59:13

标签: c++ asynchronous argument-passing lifetime

GotW #91 Solution: Smart Pointer Parameters州的草药萨特“ 由于结构化生命周期,被调用函数的生命周期是调用函数调用表达式的严格子集。“ 这是否适用于异步函数调用?

void myFunc(Bar * arg);
...
auto bar = new Bar;
std::thread t1(myFunc,bar);
delete bar;
join t1;

我认为在这种情况下,删除bar可能会使在线程t1上传入myFunc的参数无效。

1 个答案:

答案 0 :(得分:2)

1)这里你将一个指针传递给t1的ctor,所以所有结构化的lieftime相关语句只适用于指针而不是它指向的对象。

2)这里没有异步函数调用 - 你正在调用std::thread ctor,并且所有结构化的生命周期语句仅适用于ctor,而不是最终将调用myFunc的副作用。