Fyodor Soikin
Fyodor Soikin

Reputation: 80765

What is lifetime of lambda-derived implicit functors in C++?

The question is simple: what is lifetime of that functor object that is automatically generated for me by the C++ compiler when I write a lambda-expression?

I did a quick search, but couldn't find a satisfactory answer. In particular, if I pass the lambda somewhere, and it gets remembered there, and then I go out of scope, what's going to happen once my lambda is called later and tries to access my stack-allocated, but no longer alive, captured variables? Or does the compiler prevent such situation in some way? Or what?

Upvotes: 10

Views: 3063

Answers (1)

Xeo
Xeo

Reputation: 131829

Depends on how you capture your variables. If you capture them by reference ([&]) and they go out of scope, the references will be invalid, just like normal references. Capture them by value ([=]) if you want to make sure they outlife their scope.

Upvotes: 12

Related Questions