首页 > 试题广场 >

在什么情况下,析构函数需要是虚函数?

[问答题]
在什么情况下,析构函数需要是虚函数?
若存在类的继承关系,而且基类指针指向派生类对象时,一般需要将析构函数声明为虚函数,不然在使用基类指针进行析构时会无法调用派生类的析构函数而造成内存泄漏等问题
如果不存在继承关系,而且不需要使用多态的特性时,就不要将析构函数声明为虚函数,因为虚函数本身实现需要额外的花销(如vptr),在类本身比较小时,会造成很大额外花销的比例.
一般,不要继承String,Vector等库类,因为他们本身为了达到较高的效率,没有将析构函数声明为虚函数,这样如果继承了会造成上述的问题.
发表于 2015-06-25 15:24:20 回复(0)
1.若该类有基类存在的情况下,需要将析构函数声明为虚函数。否则会使得基类无法析构导致内存泄露。
2.若该类无继承关系的时候,则无需将析构函数声明为虚函数。
发表于 2015-07-27 09:08:11 回复(0)
当你用一个基类指针指向一个动态创建的派生类对象的时候,如果你想delete这个派生类对象,就必须把基类的析构函数写成虚函数,这样就可以调用派生类的析构函数delete掉这个对象了。
发表于 2016-03-29 10:20:52 回复(0)
如果派生类自己在堆上申请了空间,且会用到派生类到基类的转化,则有必要将析构函数虚函数化,否则会内存泄露
发表于 2015-07-10 10:03:09 回复(0)
当一个类打算当作基类被其他类所继承时,它的析构函数应该被设计为虚函数。这样保证派生类会调用自身的析构函数,防止内存泄露。
发表于 2015-06-11 15:56:50 回复(0)
Base *pb = new Derive;
发表于 2015-07-27 20:27:11 回复(0)
有继承存在并且析构函数中需要析构某些资源时需要虚析构函数。否则当基类操作派生类时,基类只会调用自己的析构函数,而不能调用子类的析构函数,这样就有可能造成内存泄漏。
发表于 2015-06-18 18:10:25 回复(0)
在实现多态时,当用基类指针操作派生类,如果析构函数不是虚函数,基类只会调用自己的析构函数,不会调用子类多点析构函数,这样就有可能造成内存泄露。基类是虚函数,析构时就会调用子类的析构函数。
发表于 2015-06-04 08:27:51 回复(0)
在存在类继承并且析构函数中需要析构某些资源是析构函数需要是虚函数,否则若使用父类指 针指向子类对象,在delete时只会调用父类的析构函数,而不能调用子类的析构函数,造成内存泄露?
发表于 2015-05-05 14:30:36 回复(0)