안녕하세요. 천리안 프로그래머 포럼 C++Builder 담당 임펠리테리입니다.
말씀하신대로 dynamic은 virtual과 대체로 비슷한 역할을 하는 예약어입니다.
질문하신 걸로 봐서 virtual로 선언된 함수와 일반적인 함수의 차이점은 아시는 것
같군요. virtual 함수는 지연 바인딩으로 인해 컴파일타임이 아닌 런타임에 바인딩할
함수가 결정된다는 것은 아시죠? dynamic도 마찬가지로 런타임에 바인딩이 되는데요.
한가지 중요한 차이점은, virtual의 경우, 최초의 베이스클래스에서 virtual로 선언
되었으면 그로부터 상속받는 모든 클래스의 해당 함수는 그 함수의 가상테이블 엔트
리를 가지지만, dynamic의 경우엔 엔트리를 오직 최초의 베이스클래스에서만 가진다
는 것입니다. 당연히 가상테이블의 공간은 절약할 수 있지만, dynamic으로 선언된
함수가 실제로 어디에 존재하는가를 알아내기 위해서는 상속단계의 모든 클래스를
뒤적거려야하므로 런타임에서 그만큼의 지연될 수 있습니다.
빌더의 헬프를 보시면 이 차이점이 간략히 설명되어 있고, 간단한 예제도 있을겁니다.
그럼 참고하시길..
임펠리테리 박지훈이었습니다.
(cbuilder, cbuilder@thrunet.com)
|