析构函数是否必须为虚函数?为什么?

p517函数

在C++中,基类指针能够指向一个派生类的对象。若是基类的析构函数不是虚函数,当须要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数没法被调用。容易形成内存泄漏。spa

设计析构函数为虚函数,主要是考虑到继承。
当A为基类,B为A的继承类,考虑以下状况:
A *p = new B();
.....
delete p;
若是此时A的析构函数不是虚函数,那么在delete p的时候就会调用A的析构函数,而不会调用B的析构函数,这样就会形成B的资源没有释放。
而若是A的析构函数为虚函数,那么就会调用B的析构函数,一切正常。
设计

相关文章
相关标签/搜索