比方說,我有兩個本地智能指針,foo
和bar
。C++ 11:lambda捕獲按什麼順序被破壞?
shared_ptr<Foo> foo = ...
shared_ptr<Bar> bar = ...
這些智能指針是圍繞資源的包裝,由於某種原因必須在訂單foo
,然後bar
遭到破壞。
現在我想創建一個lambda,它使用foo
和bar
,但超出了包含它們的範圍。所以我想通過值捕捉它們,就像這樣:
auto lambda = [foo, bar]() { ... };
這個函數對象中創建的foo
和bar
副本。當函數對象被破壞時,這些副本也會被破壞,但我關心這種情況發生的順序。所以我的問題是:
當一個lambda對象被破壞時,按什麼順序被它的值捕獲破壞?我怎麼能(希望)影響這個命令?
我覺得很有趣,也考慮'[=]'。 –
@ R.MartinhoFernandes:'[foo,bar]'相當於'[= foo,= bar]',即它是一個副本。 –
@大衛:我認爲他的字面意思是'[=]',即考慮聲明順序是什麼,而不列出自己的變量。 (顯然這是一個有爭議的問題,因爲聲明順序未指定,不管捕獲的方式如何) – ildjarn