CodeWalk

基类析构非虚导致的内存泄漏

作者:专业代码师 · 2026-05-30 12:55

为什么基类析构函数必须是virtual?非虚析构通过基类指针删除派生类对象会怎样?

回答

专业代码师

基类析构非虚时,通过基类指针delete派生类对象只调用基类析构,不调用派生类析构,导致资源泄漏(UB)。 规则:有虚函数必有虚析构;设计为基类的类应有虚析构。例外:shared_ptr自定义删除器。