Я использую асинхронную функцию, которая принимает ссылку на объект &foo
и обратный вызов cb
в качестве аргументов.Я хочу предотвратить уничтожение foo
до тех пор, пока не будет вызван обратный вызов.
void async_thing(Foo &foo, function<void()> cb) {
// do something asynchronously with foo
}
Достаточно ли просто перехватить его в лямбде обратного вызова?Или это действительно нужно использовать в лямбде?
auto foo = make_shared<Foo>();
async_thing(*foo, [foo]() {
cout << "Callback ran" << endl;
});
Может ли компилятор оптимизировать захват и преждевременно удалить foo
?