ein*_*ica 5 c++ lambda c++11 std-call-once
我正在观看Herb Sutter的CppCon 2014关于无锁编程的讨论.
在第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;
}
Run Code Online (Sandbox Code Playgroud)
我的问题:为什么[=]在这里使用捕获,而不是[&](或者只是[]?)
[=]如果存在,则通过引用捕获lambda主体中使用的所有自动变量,并通过引用捕获当前对象
但我们没有任何自动变量,也不需要当前对象.
这里不需要捕获默认值。[]就可以了。
正如我在评论中所写,这是一个未经测试的片段,旨在说明完全不相关的事物(即call_once)。试图对其进行过多解读并没有多大意义。
也就是说,就“为适合幻灯片而编写的未经测试的片段”这一类型而言,[=]可能是最安全的默认lambda-introducer:[&]可能会导致数据争用或悬空引用,[]如果您需要捕获,则将是错误的,并且显式捕获占用了幻灯片上的宝贵空间 - 并且需要实际考虑捕获......
| 归档时间: |
|
| 查看次数: |
138 次 |
| 最近记录: |