How to avoid using value capture when C++ uses variables non-locally
This article introduces the knowledge of "how to avoid using value capture when C++ uses variables non-locally". Many people will encounter such a dilemma in the operation of actual cases. then let the editor lead you to learn how to deal with these situations! I hope you can read it carefully and be able to achieve something!
If you capture variables that can be used non-locally, you should avoid using referenced snaps in lambda expressions. Non-local uses include returning, saving in the heap, or passing to other threads.
Reason (reason)
Pointers and references to local variables should not have a lifetime longer than their scope. A lambda expression that captures a variable by reference is just another place to hold a reference to a local variable, and variable capture in the form of a reference should not be used if the lifetime of the lambda expression (or copy) exceeds scope.
Example, bad (negative example)
Int local = 42
/ / Want a reference to local.// Note, that after program exits this scope,// local no longer exists, therefore// process () call will have undefined qualified thread pool.queueworkwork{ process (local);})
Example, goodint local = 42 Want a copy of local.// Since a copy of local is made / Want a copy of local.// Since a copy of local is made, it will// always be available for the call.thread_pool.queue_work ([=] {process (local);})
Enforcement
(Simple) Warn when capture-list contains a reference to a locally declared variable
(simple) alarm when the capture list contains locally declared variables.
(Complex) Flag when capture-list contains a reference to a locally declared variable and the lambda is passed to a non-const and non-local context
(complex) prompt when a variable pointing to a local declaration is included in the capture list and the lambda expression is passed to a non-constant or non-local context.
This is the end of the content of "how to avoid using value capture when C++ uses variables non-locally". Thank you for reading. If you want to know more about the industry, you can follow the website, the editor will output more high-quality practical articles for you!