我有下面的代码,它总是有内存泄漏请帮帮我。
谢谢, Ankata
class ABCD
{
public:
ABCD(void);
~ABCD(void);
CString tem1;
CString tem2;
};
class CDE :
public ABCD
{
public:
CDE(void);
~CDE(void);
CString tem;
};
void main()
{
CList<ABCD*> m;
CDE *a = new CDE();
a->tem1 = "AAA";
a->tem2 ="BBB";
a->tem ="CCC";
m.AddTail(a);
ABCD *b = m.GetTail();
delete b;
}
答案 0 :(得分:7)
ABCD类的析构函数不是虚拟的,因此通过将指针转换为基类类型,它不会调用派生类的析构函数,因此不会释放CDE中分配的内存。
答案 1 :(得分:2)
ABCD
的析构函数必须为virtual
。
答案 2 :(得分:1)
如果您要使用基类指针删除类,那么您的ABCD析构函数应该是虚拟的
答案 3 :(得分:0)
此代码存在很多问题,我们没有定义,因此很难知道具体错误。
使用继承时,除非您知道自己在做什么,否则请将析构函数设为虚拟。在您的特定情况下,将调用ABCD析构函数,而不是CDE析构函数
除非您也将其从m中删除,否则请勿删除b。如果没有,m包含一个悬空指针