두 개의 로컬 스마트 포인터, foo
및 bar
이 있다고 가정 해 보겠습니다.C++ 11 : 람다 캡처는 어떤 순서로 파괴 되었습니까?
shared_ptr<Foo> foo = ...
shared_ptr<Bar> bar = ...
이 스마트 포인터는 어떤 이유로 위해서는 다음 foo
, bar
에 파괴해야 자원 래퍼입니다.
이제는 foo
과 bar
을 사용하지만 그 범위를 초과하는 람다를 만들고 싶습니다. 그래서 다음과 같이 값을 캡처 할 것 :이 함수 객체 내에서 foo
및 bar
의 복사본을 생성
auto lambda = [foo, bar]() { ... };
. 함수 객체가 파괴 될 때,이 사본들은 파괴 될 것이지만, 나는 이런 일이 일어나는 순서에주의를 기울인다. 그래서 내 질문은 다음과 같습니다.
람다 객체가 파괴되면, 그 값에 의한 값 캡처가 파괴 된 순서는 무엇입니까? 그리고 어떻게이 순서에 영향을 줄 수 있습니까?
나는 또한 고려하는 것이 재미있을 거라고 생각'[=]'. –
@ R.MartinhoFernandes :'[foo, bar]'는'[= foo, = bar]와 동일합니다. 즉 사본입니다. –
@David : 그는 문자 그대로 '[=]'을 의미한다고 생각합니다. 즉, 변수 자체를 나열하지 않고 선언 순서를 고려하십시오. (분명히 선언 순서가 캡처 방법에 관계없이 지정되지 않았으므로 이제 분명하지 않습니다.) – ildjarn