🤍 전 강의 25% 할인 중 🤍

2024년 상반기를 돌아보고 하반기에도 함께 성장해요!
인프런이 준비한 25% 할인 받으러 가기 >>

  • 카테고리

    질문 & 답변
  • 세부 분야

    게임 프로그래밍

  • 해결 여부

    미해결

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

22.03.07 15:45 작성 조회수 177

0

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

 

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

 

 

답변 1

답변을 작성해보세요.

0

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

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

사빈님의 프로필

사빈

질문자

2022.03.07

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

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

 

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

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

 

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

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

 

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

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

ex) hp = 100; 

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

 

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

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

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

사빈님의 프로필

사빈

질문자

2022.03.08

아... 그렇군요!

답변감사합니다~

채널톡 아이콘