双检查锁模式 - 捕获在lambda中传递给call_once
Double-check lock pattern - capture in lambda passed to 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;
}
我的问题:为什么这里使用[=]
捕获,而不是[&]
(或者只是[]
?(
cppreference说:
[=]
捕获lambda主体中使用的所有自动变量,如果存在,则通过复制和当前对象(如果存在(
,但我们没有任何自动变量,也不需要当前对象。
这里不需要A capture-default 。[]
会很好。
正如我在评论中所写的那样,这是一个未经测试的摘要,以说明完全无关的东西(即call_once
(。试图读太多的内容没有太多要点。
也就是说,就"未经测试的摘要为适合幻灯片的片段"而言,[=]
可能是最安全的默认值 lambda-Indroducer : [&]
可能会导致数据竞赛或悬而未决的参考文献,如果您需要捕获并明确捕获在幻灯片上占用宝贵的空间,则[]
是错误的 - 需要实际考虑捕获……
相关文章:
- "error: no matching function for call to"构造函数错误
- 调用专用模板时出错"no matching function for call to [...]"
- "no matching function for call to 'Vector::Vector'"错误
- 我在 ifstream input_file(文件名)行中收到错误"no matching function to call";
- 模板规范获取'Ambiguous call to overloaded function'
- 从 TVector2 类派生复杂类:"No matching function for call to Complex::Complex()"
- Incomings Call with Android Sip stack in Embarcadero C++ bui
- 学习 c++,编译错误"no matching function for call"
- 结构错误:"no matching function for call to "
- 创建函数变体向量时"No matching function for call"错误
- C++线程"Call to non-static member function without an object argument"
- 编译时二叉搜索树错误的反向迭代器表示"no matching function call for operator=()"
- 如果子类中没有构造函数方法,则错误"no matching function for call to 'LGame::LGame(String&)'"
- 提升多精度浮点数128:标准::exp错误:'no matching function for call'
- "error: no matching function for call to",我无法更改结构的定义
- 如何修复以下错误"no match for call to '(std::tr1::shared_ptr<_iobuf*>) (FILE*&)'"
- 替换派生对象向量中的对象"no matching function to call"
- ROS CPP 相当于 Python subprocess.call() 和 shell=True
- (C++)构造函数、默认参数"call of overloaded... ambigous"
- 我的程序显示许多错误,"error: no matching function for call to 'getPercentScore'"