如果 lambda 通过引用捕获将与 lambda 一起返回的值。调用 lambda 时引用是否成立?
#include <memory>
#include <functional>
struct context_with_callback {
bool flag = false;
std::function<void()> callback;
};
std::unique_ptr<context_with_callback> make_context() {
auto ctx_with_callback = std::make_unique<context_with_callback>();
ctx_with_callback->callback = [&] () {
ctx_with_callback->flag = true;
};
return ctx_with_callback; // am I allowed to do that?
};
int main() {
auto ctx = make_context();
ctx->callback(); // will this be always valid?
return 0;
}
如果它无效,我可以通过复制来捕获原始指针,但也许有更好的方法?