请自觉为多态的基类声明virtual析构函数
来源:互联网 发布:软件配置管理人员职责 编辑:程序博客网 时间:2024/04/30 11:46
最近做的项目一直会用到多态的思想,所以会考虑到如何能够正确有效的释放对象资源(包括基类与派生类)。为什么会考虑到这个问题呢?C++ 不像Java即使编程者忘记对资源的释放,java仍然提供缺省的机制来释放资源。所以说如果你一直从事与C++开发,这个问题是逃不掉的。那么现在有什么好的方法么?
比如举个简单的例子,我们有许多办法可以记录时间。我们可以先设计一个base class TimeKeeper 和一些derived class 来记录不同的时间
class TimeKeeper {
public :
TimerKeeper();
~TimerKeeper();
};
class AtomicClock : public TimerKeeper {...}
class WaterClock : public TimerKeeper{...}
//然后我们用bass class 的指针指向子类创建的对象
TimeKeeper* t1 = new AtomicClock();
TimeKeeper* t2 = new WaterClock();
...
//用完之后选择释放资源
delete t1;
delete t2;
上述代码表面上看没有任何的错误,编译时也ok.但是当用起来时。却会报内存泄漏!!为啥会这样呢?那么我们就分析下原因。
首先我们知道子类继承父类,其实就是继承虚函数表。那么当我们想释放 base指针,就会调用不到dervied 的析构函数。以为子类的析构函数只能释放它内部的子对象。这样就遇到了非常尴尬的状况了。出现了一个非常严重的内存泄漏问题。
所以当你想创建一个base 类,而且想derived其他类。请加上virtual关键字的析构函数。
- 请自觉为多态的基类声明virtual析构函数
- 当使用多态时,请为基类声明 virtual 析构函数
- 基类的析构函数为何要声明为virtual
- 为多态基类声明virtual析构函数
- 为多态基类声明VIRTUAL析构函数
- 为多态基类声明virtual析构函数
- 为多态基类声明virtual析构函数
- 为多态基类声明virtual析构函数
- 为多态基类声明virtual析构函数
- C++里父类的析构函数为什么声明为virtual
- 关于多态基类的析构函数声明为virtual
- 若使用基类指针delete派生类对象,需将基类和派生类的析构函数声明为virtual
- 程序员面试金典: 9.13 C和C++ 13.6基类的析构函数为何要声明为virtual?
- 声明类的析构函数是virtual 目的
- 条款07:为多态基类声明virtual析构函数
- 条款7:为多态基类声明VIRTUAL析构函数
- EffictiveC++为多态基类声明virtual析构函数
- 条款7:为多态基类声明virtual析构函数
- 排序算法之直接插入排序
- NAU8810相关问题
- Node之文件路径处理模块:path模块
- 最小生成树+并查集模板
- python3.6学习笔记
- 请自觉为多态的基类声明virtual析构函数
- 页面选择列表实现逐一添加到容器中
- 同步异步和阻塞非阻塞的区别
- Hibernate做同一个事物中做两次删除问题
- 一句话说明canvas 中的save()和restore()的用途
- js判断手指滑动方向(移动端)
- localtime与localtime_r
- Elasticsearch.Net Nest 5.0.0 用法
- Spring序列化与反序列化