面试题答案
一键面试- 当
Base
类的析构函数是虚函数时:- 在
Derived
类的析构函数中,除了释放Derived
类自身分配的资源外,不需要额外做特殊操作来确保内存正确释放。因为当Base
类的析构函数是虚函数时,通过Base
类指针或引用删除Derived
类对象时,会先调用Derived
类的析构函数,然后再调用Base
类的析构函数,这样就能保证Derived
类和Base
类分配的资源都能正确释放。
- 在
- 当
Base
类的析构函数不是虚函数时:- 内存释放过程:如果通过
Base
类指针或引用删除Derived
类对象,只会调用Base
类的析构函数,而不会调用Derived
类的析构函数。 - 可能产生的内存泄漏情况:因为
Derived
类的析构函数未被调用,Derived
类自身分配的资源就无法得到释放,从而导致内存泄漏。例如,Derived
类中可能有动态分配的数组或其他资源,如果其析构函数未执行,这些资源就会一直占用内存,无法被回收,造成内存泄漏。
- 内存释放过程:如果通过