카테고리 없음

vtable, vptr ...

n00bh4cker 2020. 1. 7. 21:54

vptr -> void**    // vtable의주소를 가리킴

vptr[0] -> void*  //가상 함수 구현체의 주소를 가리킴

vptr[1] -> void* //가상 함수 구현체의 주소를 가리킴

 

(rat 은 shared_ptr로 만들었고 pAnimal은 raw pointer로 만들었음)

 

 

* 가상함수 구현체는 클래스마다 따로 정의 됨 (각각의 인스턴스마다 생기는 것 아님에 유의!!)

* 가상함수는 동적바인딩 됨... 즉, 컴파일 타임에 함수의 주소가 결정 되지 않고 런타임에 결정 됨!

* vtable에는 가상함수들의 주소만 담고 있음.  breath 함수 같은 경우는 virtual 함수가 아니므로 vtable에 없음