父类和子类的析构函数的有关问题!解决马上结帖
父类和子类的析构函数的问题!!解决马上结帖.
现我有一父类
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
现我有一父类
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