강의

멘토링

커뮤니티

인프런 커뮤니티 질문&답변

사빈님의 프로필 이미지
사빈

작성한 질문수

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문

람다 (lambda)

그래서 결국 클래스 내부의 _hp는 따로 캡처를 못하는건가요?

작성

·

291

0

영상 마지막에 this를 캡처하게되면 어떻게되는지 잘 이해를 했습니다.

 

근데 결국 클래스내부에서 _hp만 캡처하여 사용하는방법은 없는건가요?

 

 

답변 1

0

Rookiss님의 프로필 이미지
Rookiss
지식공유자

_hp만 캡쳐해서 '사용'한다는게 값을 읽기만 하는 상황이라면 상관없지만

값을 write해서 덮어 써야하는 경우라면 당연히 문제가 됩니다.
애당초 _hp라는 것이 현재 Knight 객체에 의존적이고,
Knight 객체가 메모리에서 해제되었다면,
당연히 건드려서는 안되는 메모리를 참조한 것이 되기 때문이죠.
기본적으로 람다랑 포인터는 궁합이 매우 안 좋습니다.
정말 정말 _hp를 다른 값으로 write해야 하는 경우라면,
스마트 포인터까지 이용해서 스마트 포인터의 캡처값을 람다 안으로 넘겨서
객체가 절대 소멸되지 않게 유지를 시켜줘야 합니다.

사빈님의 프로필 이미지
사빈
질문자

아 자세한 답변 감사합니다!

이렇게까지 자세히 해주실줄 몰랐는데 .. ㄷㄷ

 

아 사용한다는 뜻은 []안에 _hp를 쓰는건 왜 문법적으로 틀리냐 였습니다

제가 질문을 좀 성의없이 한것같네요 ㅠ

 

캡처 범위 자체가 람다식이 있는 함수 범위 안에 있는 변수만 가능한건가요?

ResetHpJob 함수 밖에 _hp가 있기때문에 []안에 _hp를 넣었을때 오류가 나는건지

 

그리고 read하는건 문제가 발생할 여지가 없어 별로 상관없지만

write를 하는건 말씀하신것처럼 스마트 포인터를 사용하지않으면

ex) hp = 100; 

오류가 나던데 그건 c++에서 발생할 위험때문에 그냥 문법적으로 막아둔건가요?

 

생각지도 못한부분까지 자세히 설명해주셔서 감사합니다!

그덕에 질문만 더 늘어서 죄송하긴하네요 ㅠ

Rookiss님의 프로필 이미지
Rookiss
지식공유자

_hp를 해도 사실 this->_hp가 생략된 형태고,
this라는 특정 주소 없이는 _hp도 접근이 불가능하니
this 캡처 없이는 _hp 접근도 안 되게 문법적으로 그렇게 되어 있습니다.

사빈님의 프로필 이미지
사빈
질문자

아... 그렇군요!

답변감사합니다~

사빈님의 프로필 이미지
사빈

작성한 질문수

질문하기