请看下面的代码。
1 #include <stdio.h>
2 class A
3 {
4 public:
5 A(){a=0;}
6 ~A() {};
7 int a;
8 };
9
10 class B : public A
11 {
12 public:
13 B(){b=0;}
14 virtual ~B(){}
15 virtual void Func(){}
16 int b;
17 };
18
19
20 int main()
21 {
22 B* pB = new B;
23 A* pA = pB;
24 printf("b=%p a=%p\n", pB, pA);
25 }
26
输出是:
b=00372D98 a=00372D9C 为什么两个指针的赋值都会不一样?
让我们看看这两块内存吧。


原来pB的内存前多了4字节的虚函数表。
因为A没有虚函数。A就没有虚函数表。
但是B是有虚函数表的,因此在B对象的内存中,会多一块内存来存放虚函数表。
如果通过delete pA来释放B的话就会造成内存泄漏。
因此在设计类的时候,除非确定不会被继承,否则
释构函数一定要声明成虚函数。