什么情况下必须使用虚析构函数:
当父类指针指向子类,且父类和子类存在在析构时需要销毁的变量时。
若不使用虚析构函数,则析构函数无多态性,默认只会调用父类的析构函数,因此不会销毁子类的变量,造成内存泄漏。
当使用虚析构函数时,由于多态,会调用子类的析构函数,而子类析构函数在执行完后会调用父类的析构函数,因此不会导致内存泄漏。
建议只要有继承,就将父类的析构函数定义为虚函数。
什么情况下必须使用虚析构函数:
当父类指针指向子类,且父类和子类存在在析构时需要销毁的变量时。
若不使用虚析构函数,则析构函数无多态性,默认只会调用父类的析构函数,因此不会销毁子类的变量,造成内存泄漏。
当使用虚析构函数时,由于多态,会调用子类的析构函数,而子类析构函数在执行完后会调用父类的析构函数,因此不会导致内存泄漏。
建议只要有继承,就将父类的析构函数定义为虚函数。