条款 07 为多态基类声明vitual析构函数
2015-09-04 16:17
218 查看
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 如果你想拥有一个不被实例的基类并且用来通过基类接口处理子类对象,可以把基类的析构定义为纯虚
相关文章推荐
- 脚本文件基础记录case
- 9.3 - 抗战胜利日
- 嵌入式Linux驱动开发日记
- arduino uno接口部分介绍
- 树莓派折腾日记2-DLNA云服务器的架设
- 二进制中1的个数
- 开发线程安全的Servlet
- [MFC]DoDataExchange的对话框数据交换和检验
- 【转】AngularJS的$resource
- ubuntu 配置静态IP及DNS
- 第五讲:Fast RTL-level verification
- SQLite学习笔记(14)-虚拟机
- 程序员养成记
- Codeforces 460d Littel victor and set
- strcpy,strnpy和strlcpy的区别
- padding margin border 和元素大小
- UITabBarItem改变字体颜色
- Java判断两个时间段是否有交集
- HDU 2086 A1 = ?(规律)
- 自我学习