1 在有多态的基类中把析构函数声明为virtual
因为在delete使用指向子类的基类指针(多态)时,尽管是指向子类,但因为指针的类型为基类类型,导致子类并没有被析构,形成局部销毁
2 没有virtual的基类,尽量避免把析构声明为virtual ,因为虚的在会增加对象的大小的50%~%100,也影响其可移植性
3 非多态用途的string ,STL中的vector,list,set等的析构函数都为non-virtual,因为他们都非禁止派生,如果你试图继承他们,无意间把你派生的子类指针转换成了基类类型,在 delete后又出错,且子类也并未析构
4 如果你想拥有一个不被实例的基类并且用来通过基类接口处理子类对象,可以把基类的析构定义为纯虚
因为在delete使用指向子类的基类指针(多态)时,尽管是指向子类,但因为指针的类型为基类类型,导致子类并没有被析构,形成局部销毁
2 没有virtual的基类,尽量避免把析构声明为virtual ,因为虚的在会增加对象的大小的50%~%100,也影响其可移植性
3 非多态用途的string ,STL中的vector,list,set等的析构函数都为non-virtual,因为他们都非禁止派生,如果你试图继承他们,无意间把你派生的子类指针转换成了基类类型,在 delete后又出错,且子类也并未析构
4 如果你想拥有一个不被实例的基类并且用来通过基类接口处理子类对象,可以把基类的析构定义为纯虚