[c++] 가상 함수의 메모리 할당(memory allocation)
가상 함수를 사용하면 프로그램이 실행될 때 객체의 실제 타입을 고려하여 올바른 함수를 호출할 수 있습니다. 이를 위해 객체의 가상 함수 테이블(virtual function table, VTable)이 필요하며, 이 테이블은 가상 함수의 주소를 저장합니다.
일반적으로, 각 객체는 클래스에 정의된 가상 함수의 수에 따라 VTable의 크기가 결정됩니다. VTable의 각 항목은 해당 가상 함수의 주소를 가리키며, 모든 객체가 동일한 클래스를 공유하므로 메모리를 공유할 수 있습니다.
아래 예시는 가상 함수가 메모리에 할당되는 방식을 보여줍니다.
class Base {
public:
virtual void func() {
// 가상 함수 내용
}
// 다른 멤버 함수들
};
class Derived : public Base {
public:
void func() override {
// 재정의된 가상 함수 내용
}
// 다른 멤버 함수들
};
int main() {
Base* ptr = new Derived();
ptr->func(); // 동적 바인딩을 통해 Derived::func()를 호출합니다.
delete ptr;
return 0;
}
위의 예제는 가상 함수를 사용하여 다형성을 구현하는 방법을 보여줍니다. 이를 통해 프로그램은 실행 시간에 적절한 함수를 호출할 수 있습니다.
참고 자료:
- https://stackoverflow.com/questions/992283/
- https://en.cppreference.com/w/cpp/language/virtual