class A
{
public:
};
class B : public A
{
public:
};
int main()
{
}
여기까지만 보면 A 클래스의 크기는 1이다.
class A
{
public:
virtual void Func()
{
}
};
가상함수가 들어가는 순간 가상함수는 컴파일러가
기본적으로 함수포인터를 기반해서 동작시킨다.
그렇기 때문에 가상함수를 동작시키기 위한 함수포인터를 만들게 되고
(이때 이 가상함수 포인터는 가상함수 테이블 이라는 정식 명칭이 있다.)
함수포인터의 크기도 기본적으로는 일반 포인터와 같기때문에 각 객체마다 저 가상함수를
동작시키기 위한 가상함수 포인터가 하나 생긴다.
(포인터의 크기는 32bit에서는 4byte 64bit에서는 8byte)
(포인터는 램의 어느 위치를 표현하기 위한 정수일뿐이다.)
그렇기 때문에 이제 A 클래스의 크기는 8byte가 된다.
'C++' 카테고리의 다른 글
동적 메모리 할당과 해제,댕글링 포인터,vector의 내부동작 (0) | 2020.12.31 |
---|---|
Pure Virtual Function(순수 가상 함수) (0) | 2020.12.31 |
Virtual Function(가상 함수),다운 캐스팅 (0) | 2020.12.31 |
String (0) | 2020.12.29 |
Vector (0) | 2020.12.29 |