[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;
}

위의 예제는 가상 함수를 사용하여 다형성을 구현하는 방법을 보여줍니다. 이를 통해 프로그램은 실행 시간에 적절한 함수를 호출할 수 있습니다.

참고 자료: