+ -
当前位置:首页 → 问答吧 → 父类提供虚析构函数,或者不提供虚析构函数,删除父类指针

父类提供虚析构函数,或者不提供虚析构函数,删除父类指针

时间:2011-12-08

来源:互联网

 
class Test
{


};




class Drived:public Test
{
int a;
double b;

};



int main()
{
Drived* pd=new Drived();

Test* p=pd;

delete p;




return 0;
}

vs2010下,挑时候,没有看到内存是否泄露???

什么原因????

不是说,当删除父类指针的时候,如果父类不提供虚析构函数,那么会引起内存泄露???


没有看到 出现问题。。。






作者: caddor   发布时间: 2011-12-08

本来就木有泄露么,你试着在父类理由new一个试试

作者: namelij   发布时间: 2011-12-08

我在外面,手动的primer 没在手边,

记得primer中提到过,

如果你的类想成为 父类,那么建议析构函数设置为虚函数。。。

原因:内存泄露。。。。。。。。。




引用 1 楼 namelij 的回复:
本来就木有泄露么,你试着在父类理由new一个试试

作者: caddor   发布时间: 2011-12-08

试验证明:


当 派生类有虚函数的时候, 如果父类不用虚析构函数,

删除父类指针,有问题。。。

作者: caddor   发布时间: 2011-12-08

你在派生类中new一个空间,就会泄露了

作者: zzcmx2008   发布时间: 2011-12-08

class Test
{

};




class Drived:public Test
{
int* p;
double b;
public:
Drived()
{
p=new int(10);
}
~Drived()
{
delete p;
p=NULL;
}
};



int main()
{
Test* p=new Drived();


delete p;




return 0;
}



没有泄露内存

父类木有提供提供虚析构函数啊

作者: caddor   发布时间: 2011-12-08

引用 5 楼 caddor 的回复:
class Test
{

};




class Drived:public Test
{
int* p;
double b;
public:
Drived()
{
p=new int(10);
}
~Drived()
{
delete p;
p=NULL;
}
};



int main()
{
Test* p=new Drived(……

析构了

作者: linyongzuo   发布时间: 2011-12-08

再说一个new对应一个delete..怎么可能有内存泄露

作者: linyongzuo   发布时间: 2011-12-08

不是会泄露 是不会调用析构可能导致泄露

作者: jptaozhantaozhan   发布时间: 2011-12-08

如果父类没有析构那么在删除派生类的时候就没有调用到父类的析构函数,这样的话有可能在父类中的某些变元就不会被释放掉。就泄露了……

作者: luminos   发布时间: 2011-12-08

引用 5 楼 caddor 的回复:

class Test
{

};




class Drived:public Test
{
int* p;
double b;
public:
Drived()
{
p=new int(10);
}
~Drived()
{
delete p;
p=NULL;
}
};



int main()
{
Test* p=new Driv……

你用什么工具测它有没有泄露内存的?

作者: uuussseeennn   发布时间: 2011-12-08


这肯定是有泄漏的,你看是很难看出来的,你循环10000次看看

作者: qscool1987   发布时间: 2011-12-08

热门下载

更多