프로그래밍/의문
-
[c++] 람다 캡쳐를 잘못 사용했다.프로그래밍/의문 2014. 7. 10. 03:07
Socket* socket = queue_.front(); impl_.async_accept(*socket, [&](const ErrorCode& error) // 전부 참조([&])로 했을 때 socket이 쓰레기 값으로 받아졌었다. { if (error) { throw error; } else { accepted_sockets_.push(socket); // 여기서 쓰레기 값이 대입이 됨 } } ); 생각없이 저 코드를 썼다. 당시엔 이상한 점이 없다고 생각했지만 -_-; async 함수가 비동기 함수이다. bind가 된 완료함수가 언제 불릴지 모른다는 말. 따라서 스택에 있던 Socket* socket의 값은 완료함수가 호출된 시점에선 쓰레기 값이 되고, 나는 그걸 참조해서 사용하려 했던 것이다. ..