Skip to content

C++:virtual

Virtual Table

Virtual 을 사용하면 클래스 내부에, 가상 테이블이 생성된다.

#include <iostream>
using namespace std;

struct A
{
    A() {}
    ~A() {}
};

struct B
{
    B() {}
    virtual ~B() {}
};

int main()
{
    cout << "size: " << sizeof(A) << endl;
    cout << "size: " << sizeof(B) << endl;
    return 0;
/*OUTPUT:
size: 1
size: 8
*/
}

실제로 위와 같이 class의 크기도 달라진다.

Example

#include <iostream>
using namespace std;

struct A
{
    A() { cout << "A()\n"; }
    /*virtual*/ ~A() { cout << "~A()\n"; }
};

struct B : public A
{
    B() { cout << "B()\n"; }
    ~B() { cout << "~B()\n"; }
};

void test1()
{
    B b1;
/*OUTPUT:
A()
B()
~B()
~A()
*/
}

void test2()
{
    A * b2 = new B();
    delete b2;
/*OUTPUT:
A()
B()
~A()
*/
}

test2와 같은 현상을 해결하기 위하여 virtual을 사용한다.

See also