클로저에 대한 설명을 MDN에서 보니까(대충 감각적으로 알고 있었음)
클로저는 독립적인 (자유) 변수를 가리키는 함수이다. 또는, 클로저 안에 정의된 함수는 만들어진 환경을 '기억한다'.
임.
C++11에서 익명함수를 지원하기 때문에 클로저를 지원함.
C++에서는 클로저로 지역변수를 캡쳐할 떄 두가지 방식으로 챕쳐할 수 있음
1. 변수의 레퍼런스가져오는 방식
2. 변수의 값을 복사하는 방식
레퍼런스를 가져오는 방식으로 캡쳐하면 함수가 끝날 때 지역변수들도 소멸하므로 아까 GoLang처럼 하다가는 함수스택이 망가짐.
변수의 값을 복사하는 방식으로 캡쳐하면 const, 상수여서 값은 볼 수 있지만 변수를 수정할 수 없음.
GoLang이나 다른 메모리관리가 되는 프로그래밍 언어야 레퍼런스변수만 복사하는 것이고, 객체의 해제가 객체를 참조하는 레퍼런스 변수가 없을 때 해제될테니 문제가 없지만 C++은 그러지 않기 때문에 똑같은 방식으로는 못한다고 생각함.
http://ideone.com/UXVSLU
응 잘돼~
스태틱변수로 정적변수만든 다음에 한 거잖아. 되니까 문제 없나... 그럼 문자열에서 일부도 지워보셈
함수가 닫힌 공간을 가질 수 있다는 점에서 완전히 동일함. local static 변수로 closure의 functionality를 그대로 구현해낼 수 있음. 저 local static 변수가 임의의 힙영역 메모리를 가리킬 수 있을 때 어떤 일이 벌어질 수 있을 것 같냐
문제없다고 생각함. 생각이 짧아서 미안하다.