c++ - 异步函数调用的参数生命周期

标签 c++ asynchronous argument-passing lifetime

Herb Sutter 在 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) 在这里,您将一个指针传递给t1 的构造函数,因此所有与生命周期相关的结构化语句仅适用于该指针,而不适用于它指向的对象.

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

关于c++ - 异步函数调用的参数生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31435424/

相关文章:

c++ - 如何打印通过引用传递的 glm::vec3 类型的 vector 值?

c++ - 为什么这个结构数组上的代码有效?

c# - 卡在管道上的 WaitForConnectionAsync()

javascript - Promise 如何与嵌套函数调用一起工作

arrays - C++ 托管数组大小

c++ - 在 C++ 中使用 wininet

javascript - setInterval 仅在间隔结束时执行函数

c - 将类型转换数组返回到主函数

用 R 中的列表替换参数

c++ - 将python字典翻译成C++