관리 메뉴

기억을 위한 기록들

[CPP] 가상(virtual)함수의 동작원리 본문

C & CPP

[CPP] 가상(virtual)함수의 동작원리

에드윈H 2021. 3. 10. 16:42

- 가상함수는 vtable 혹은 가상 테이블에 의존한다.

 

- 어떤 클래스의 함수가 virtual로 선언되어 있으면, 해당 클래스의 가상 함수주로를 보관하는 vtable이 만들어진다.

 

- 컴파일러는 또한 해당 클래스의 vtable을 가리키는 vptr이라는 숨겨진 변수를 해당 클래스에 추가한다.

 

- 하위 클래스가 상위 클래스의 함수를 오버라이드하지 않으면, 하위 클래스의 vtable은 상위 클래스의 가상 함수주소를 보관한다.

 

- 이 vtable을 사용하여 가상함수가 호출될때 어느 주소에 있는 함수가 호출되어야 하는지를 결정한다.

 

- C++의 동적바인딩(dynamic binding)은 이 가상 테이블 매커니즘을 사용하여 실행된다.

 

- 비가상함수에 대한 호출은 컴파일시간에 정적 바인딩을 통해 처리.