C++程序改错题,好像是D类有问题,但是我看不出哪里有问题,请高手指教下,谢谢啦。
#include<iostream>usingnamespacestd;classB{int*m_ip;public:B(){m_ip=newint[3];cout<<"...
#include<iostream>
using namespace std;
class B
{
int *m_ip;
public:
B(){ m_ip=new int[3]; cout<<"B() m_ip="<<m_ip<<endl; }
~B()
{
delete[] m_ip;
cout<<"~B()"<<endl;
}
};
class D: public B
{
int *m_iq;
public:
D(){ m_iq=new int[10]; cout<<"D() m_iq="<<m_iq<<endl; }
~D(){ delete[] m_iq; cout<<"~D()"<<endl; }
};
void main()
{
for(int i=0; i<3; i++)
{
B* m_bp=new D;
delete m_bp;
}
} 展开
using namespace std;
class B
{
int *m_ip;
public:
B(){ m_ip=new int[3]; cout<<"B() m_ip="<<m_ip<<endl; }
~B()
{
delete[] m_ip;
cout<<"~B()"<<endl;
}
};
class D: public B
{
int *m_iq;
public:
D(){ m_iq=new int[10]; cout<<"D() m_iq="<<m_iq<<endl; }
~D(){ delete[] m_iq; cout<<"~D()"<<endl; }
};
void main()
{
for(int i=0; i<3; i++)
{
B* m_bp=new D;
delete m_bp;
}
} 展开
3个回答
展开全部
有派生类的类的析构函数必须是virtual
你的delete m_bp由于~B不是virtual,不会调用D::~D导致m_iq泄漏
你的delete m_bp由于~B不是virtual,不会调用D::~D导致m_iq泄漏
追问
一般的习惯是 只要是析构函数都是要设置为虚函数的是吧
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询