effective c++条款14学习总结
来源:互联网 发布:人工智能 城市规划 编辑:程序博客网 时间:2024/06/06 13:59
条款14: 确定基类有虚析构函数
c++语言标准关于这个问题的阐述非常清楚:当通过基类的指针去删除派生类的对象,而基类又没有虚析构函数时,结果将是不可确定的。所以当类要被继承的时候,要有虚析构函数。
如果某个类不包含虚函数,那一般是表示它将不作为一个基类来使用。当一个类不准备作为基类使用时,使析构函数为虚一般是个坏主意。因为这样会增加额外的负担(维护虚函数表)。
最后,值得指出的是,在某些类里声明纯虚析构函数很方便。纯虚函数将产生抽象类——不能实例化的类(即不能创建此类型的对象)。有些时候,你想使一个类成为抽象类,但刚好又没有任何纯虚函数。怎么办?因为抽象类是准备被用做基类的,基类必须要有一个虚析构函数,纯虚函数会产生抽象类,所以方法很简单:在想要成为抽象类的类里声明一个纯虚析构函数。
这里是一个例子:
class awov { // awov = "abstract w/o
// virtuals"
public:
virtual ~awov() = 0; // 声明一个纯虚析构函数
};
这个类有一个纯虚函数,所以它是抽象的,而且它有一个虚析构函数,所以不会产生析构函数问题。但这里还有一件事:必须提供纯虚析构函数的定义:
awov::~awov() {} // 纯虚析构函数的定义
这个定义是必需的,因为虚析构函数工作的方式是:最底层的派生类的析构函数最先被调用,然后各个基类的析构函数被调用。这就是说,即使是抽象类,编译器也要产生对~awov的调用,所以要保证为它提供函数体。如果不这么做,链接器就会检测出来,最后还是得回去把它添上。
- effective c++条款14学习总结
- 《Effective C++》条款03总结
- 《Effective C++》条款04总结
- 《Effective C++》条款07总结
- effective c++条款11学习总结
- effective c++条款12学习总结
- effective c++条款13学习总结
- effective c++条款13学习总结
- effective c++条款13学习总结
- effective c++条款15学习总结
- effective c++条款16学习总结
- effective c++学习总结(条款18--条款29)
- Effective C++ 条款总结
- effective c++条款总结
- 《Effective C++》学习总结
- [Effective C++]条款14: 确定基类有虚析构函数
- Effective C++:条款01
- Effective C++:条款02
- 安装xorg及XDirectFB
- 基础类的DSP/BIOS API调用
- debian内核编译
- delphi 中的dll编程注意事项
- 用GDB调试DirectFB
- effective c++条款14学习总结
- DSP/BIOS的启动序列
- table的宽度,单元格内换行问题[转]
- 如何获取多核、多cpu系统中指定cpu的序列号
- DSP/BIOS任务通信和同步 MBX SEM QUE模块API
- C#判断中英文混合字符串长度及截取函数
- 控制linux动态链接库(so, standard object)导出函数
- WinCE桌面定制
- 我的人生--待续