Скажем, у меня есть два локальных интеллектуальных указателя, foo
и bar
.
shared_ptr<Foo> foo = ...
shared_ptr<Bar> bar = ...
Эти интеллектуальные указатели представляют собой оболочки вокруг ресурсов, которые по какой-то причине должны быть разрушены в порядке foo
, а затем bar
.
Теперь я хочу создать лямбду, которая использует foo
и bar
, но переживает область, содержащую их. Поэтому я бы захватил их по значению, например:
auto lambda = [foo, bar]() { ... };
Это создает копии foo
и bar
внутри объекта функции. Когда объект функции будет разрушен, эти копии также будут уничтожены, но я забочусь о порядке, в котором это происходит. Поэтому мой вопрос:
Когда объект лямбда разрушен, в каком порядке уничтожаются его значения по величине? И как я могу (надеюсь) повлиять на этот порядок?