posts - 1,  comments - 0,  trackbacks - 0
  2009年8月11日
请看下面的代码。
 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的话就会造成内存泄漏。
因此在设计类的时候,除非确定不会被继承,否则释构函数一定要声明成虚函数
posted @ 2009-08-11 23:10 阳荣辉 阅读(158) | 评论 (0)编辑 收藏
仅列出标题