【发布时间】:2012-09-20 20:41:48
【问题描述】:
假设我有两个本地智能指针,foo 和 bar。
shared_ptr<Foo> foo = ...
shared_ptr<Bar> bar = ...
这些智能指针是资源的包装器,出于某种原因必须按照foo,然后bar 的顺序销毁。
现在我想创建一个使用 foo 和 bar 的 lambda,但比包含它们的作用域更长。所以我会按价值捕获它们,如下所示:
auto lambda = [foo, bar]() { ... };
这会在函数对象中创建foo 和bar 的副本。当函数对象被破坏时,这些副本也将被破坏,但我关心这种情况发生的顺序。所以我的问题是:
当一个 lambda 对象被破坏时,它的按值捕获被破坏的顺序是什么?我如何(希望)影响这个顺序?
【问题讨论】:
-
我认为考虑
[=]会很有趣。 -
@R.MartinhoFernandes:
[foo,bar]等价于[=foo,=bar],即它是一个副本。 -
@David :我认为他的字面意思是
[=],即在不列出变量自己的情况下考虑声明顺序。 (显然,现在这是一个有争议的问题,因为无论捕获如何,声明顺序都未指定。)