C++

가상함수 추가설명

Nin 2020. 12. 31. 02:23
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