gpt4 book ai didi

c++ - 仔细检查锁定模式 - 在传递给 call_once 的 lambda 中捕获

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:50:05 24 4
gpt4 key购买 nike

我正在观看 Herb Sutter 在 CppCon 2014 上关于无锁编程的演讲。

关于 handout page 7 ,我们有以下代码:

static unique_ptr<widget> widget::instance;
static std::once_flag widget::create;

widget& widget::get_instance() {
std::call_once( create, [=]{ instance = make_unique<widget>(); } );
return *instance;
}

我的问题:为什么这里使用 [=] 捕获,而不是 [&](或者可能只是 []?)

cppreference说:

[=] captures all automatic variables used in the body of the lambda by copy and current object by reference if exists

但我们没有任何自动变量,也不需要当前对象。

最佳答案

这里不需要capture-default[] 就可以了。

正如我在评论中所写,这是一个未经测试的片段,用于说明完全不相关的事情(即 call_once)。尝试过多地阅读它没有多大意义。

也就是说,就“为适合幻灯片而编写的未经测试的代码片段”这一类型而言,[=] 可能是最安全的默认 lambda 引入器 : [&] 可能导致数据竞争或悬垂引用,如果您需要捕获,[] 将是错误的,并且显式捕获会占用幻灯片上的宝贵空间 - 并且需要实际考虑捕获……

关于c++ - 仔细检查锁定模式 - 在传递给 call_once 的 lambda 中捕获,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48622648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com