카테고리 없음
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에 없음