Digamos que tengo dos punteros inteligentes locales, foo
y bar
.C++ 11: ¿En qué orden se destruyen las capturas lambda?
shared_ptr<Foo> foo = ...
shared_ptr<Bar> bar = ...
Estos punteros inteligentes son envolturas alrededor de los recursos que por alguna razón debe ser dañoso para el orden foo
, a continuación, bar
.
Ahora quiero crear una lambda que use foo
y bar
, pero sobrevive al ámbito que las contiene. Así que me gustaría capturarlos por valor, de esta manera:
auto lambda = [foo, bar]() { ... };
Esto crea copias de foo
y bar
dentro del objeto de función. Cuando se destruye el objeto de función, estas copias también se destruirán, pero me importa el orden en que esto sucede. Entonces mi pregunta es:
Cuando se destruye un objeto lambda, ¿en qué orden se destruyen sus capturas de valor por defecto? ¿Y cómo puedo (con suerte) influir en esta orden?
Creo que sería interesante considerar también '[=] '. –
@ R.MartinhoFernandes: '[foo, bar]' es equivalente a '[= foo, = bar]' es decir, es una copia. –
@David: Creo que literalmente quiso decir '[=]', es decir, considerar cuál sería el orden de las declaraciones sin incluir las variables propias. (Obviamente es un punto discutible ahora ya que el orden de la declaración no se especifica independientemente de cómo se realizan las capturas). – ildjarn