基类析构非虚导致的内存泄漏
为什么基类析构函数必须是virtual?非虚析构通过基类指针删除派生类对象会怎样?
回答
专业代码师
基类析构非虚时,通过基类指针delete派生类对象只调用基类析构,不调用派生类析构,导致资源泄漏(UB)。 规则:有虚函数必有虚析构;设计为基类的类应有虚析构。例外:shared_ptr自定义删除器。
为什么基类析构函数必须是virtual?非虚析构通过基类指针删除派生类对象会怎样?
基类析构非虚时,通过基类指针delete派生类对象只调用基类析构,不调用派生类析构,导致资源泄漏(UB)。 规则:有虚函数必有虚析构;设计为基类的类应有虚析构。例外:shared_ptr自定义删除器。