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을 사용한다.