-
카테고리
-
세부 분야
게임 프로그래밍
-
해결 여부
미해결
그래서 결국 클래스 내부의 _hp는 따로 캡처를 못하는건가요?
22.03.07 15:45 작성 조회수 177
0
영상 마지막에 this를 캡처하게되면 어떻게되는지 잘 이해를 했습니다.
근데 결국 클래스내부에서 _hp만 캡처하여 사용하는방법은 없는건가요?
답변을 작성해보세요.
0
Rookiss
지식공유자2022.03.07
_hp만 캡쳐해서 '사용'한다는게 값을 읽기만 하는 상황이라면 상관없지만
값을 write해서 덮어 써야하는 경우라면 당연히 문제가 됩니다.
애당초 _hp라는 것이 현재 Knight 객체에 의존적이고,
Knight 객체가 메모리에서 해제되었다면,
당연히 건드려서는 안되는 메모리를 참조한 것이 되기 때문이죠.
기본적으로 람다랑 포인터는 궁합이 매우 안 좋습니다.
정말 정말 _hp를 다른 값으로 write해야 하는 경우라면,
스마트 포인터까지 이용해서 스마트 포인터의 캡처값을 람다 안으로 넘겨서
객체가 절대 소멸되지 않게 유지를 시켜줘야 합니다.
사빈
질문자2022.03.07
아 자세한 답변 감사합니다!
이렇게까지 자세히 해주실줄 몰랐는데 .. ㄷㄷ
아 사용한다는 뜻은 []안에 _hp를 쓰는건 왜 문법적으로 틀리냐 였습니다
제가 질문을 좀 성의없이 한것같네요 ㅠ
캡처 범위 자체가 람다식이 있는 함수 범위 안에 있는 변수만 가능한건가요?
ResetHpJob 함수 밖에 _hp가 있기때문에 []안에 _hp를 넣었을때 오류가 나는건지
그리고 read하는건 문제가 발생할 여지가 없어 별로 상관없지만
write를 하는건 말씀하신것처럼 스마트 포인터를 사용하지않으면
ex) hp = 100;
오류가 나던데 그건 c++에서 발생할 위험때문에 그냥 문법적으로 막아둔건가요?
생각지도 못한부분까지 자세히 설명해주셔서 감사합니다!
그덕에 질문만 더 늘어서 죄송하긴하네요 ㅠ
Rookiss
지식공유자2022.03.07
_hp를 해도 사실 this->_hp가 생략된 형태고,
this라는 특정 주소 없이는 _hp도 접근이 불가능하니
this 캡처 없이는 _hp 접근도 안 되게 문법적으로 그렇게 되어 있습니다.
답변 1