인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

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

monstro님의 프로필 이미지
monstro

작성한 질문수

[게임 프로그래머 입문 올인원] C++ & 자료구조/알고리즘 & STL & 게임 수학 & Windows API & 게임 서버

섹션 5 - C 스타일 캐스팅에서 offset관련하여 질문이 있습니다

해결된 질문

작성

·

270

1

포인터 간 캐스팅에서

dog -> age = 10; 코드로 인해 침해 당하는 부분이

Knight가 Player로부터 상속된 요소들이 모여있는 부분이라면

상속된 요소들이 모여있는 부분의 offset이 0번인건가요?

Dog클래스에서 age의 offset이 0번인것은 알겠지만,

상속이 이루어진 클래스, 특히

class Player

{

public:

virtual ~Player() { }

}

class Knight : public Player

{

public:

Player* target;

int hp;

int defence;

};

와 같은 클래스에서 offset을 어떻게 구분할 수 있는지 궁금합니다

 

답변 1

0

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

뭐 그건 사실 메모리를 까보는게 제일 정확하구요.
가상 함수가 1개라도 있으면 가상 함수 테이블이 생기는데 그게 보통 0번 오프셋으로 들어갑니다.
사실 상속 구조가 들어가는데 가상 함수가 없는 것은 말이 안 되겠죠 (하물며 소멸자라도)

https://stackoverflow.com/questions/64608353/how-to-calculate-member-offset-in-c-class

monstro님의 프로필 이미지
monstro
질문자

그렇다면 정확한 값을 확인하기 전까지는 상속된 것부터 0번 오프셋으로 들어간다고 생각하면 되겠군요. 궁금했던 점이 해결되었습니다. 빠른 답변에 감사드립니다.

monstro님의 프로필 이미지
monstro

작성한 질문수

질문하기