p517
在C++中,基类指针可以指向一个派生类的对象。如果基类的析构函数不是虚函数,当需要delete这个指向派生类的基类指针时,就只会调用基类的析构函数,而派生类的析构函数无法被调用。容易造成内存泄漏。
设计析构函数为虚函数,主要是考虑到继承。
当A为基类,B为A的继承类,考虑如下情况:
A *p = new B();
.....
delete p;
如果此时A的析构函数不是虚函数,那么在delete p的时候就会调用A的析构函数,而不会调用B的析构函数,这样就会造成B的资源没有释放。
而如果A的析构函数为虚函数,那么就会调用B的析构函数,一切正常。




探讨了在C++中,为何基类的析构函数应声明为虚函数。若非虚函数,通过基类指针删除派生类对象时,仅会调用基类析构函数,导致派生类资源未释放,引发内存泄漏。虚析构函数确保正确调用派生类析构函数,避免资源泄露。
405

被折叠的 条评论
为什么被折叠?



