父类和子类的析构函数的有关问题!解决马上结帖

父类和子类的析构函数的问题!!解决马上结帖.
现我有一父类  
class   abc{
        public:
              unsigned   char*   dddd;
}
有一子类
class   test   :   public   abc{
          public:
                  unsigned   char*   asdf;
}
问题是这样的:
我使用了一个对像:
test   a   =   new   test();
vector <abc*>   List;
List.push_back(a);

delete   *List.begin();删除掉

我在abc类中有一析构函数用来删除dddd这块内存,我在test类中也有一析构函数,用来删除asdf     这块内存,但我发现当我使用   delete   *List.begin()时只会调用父类的
析构函数,也就是只会删除dddd这块内存,但*List.begin()这个对像实际是test这个类的对像,但删除*List.begin()为什么只会执行你类的呢?
我有什么办法可以把两个dddd和asdf这两个都删除掉呢?如果不删除就内存泄露了啊!

------解决方案--------------------
class Base{
public:
virtual ~Base(){cout < < "~Base " < <endl;}
};

class Child1 : public Base{
public:
virtual ~Child1(){cout < < "~Child1 " < <endl;}
};

class Child2 : public Base{
public:
virtual ~Child2(){cout < < "~Child2 " < <endl;}
};

int main(int argc, char* argv[])
{
Child1 *pc1 = new Child1();
Child2 *pc2 = new Child2();
Base *p1,*p2;
p1=pc1;
p2=pc2;
delete p1;
delete p2;
system( "pause ");
return 0;
}

析构函数声明为virtual就OK