[Effective C++系列]-为多态基类声明Virtual析构函数
- [原理]
- [示例]
class car
{
public:
car();
~car();
...
}; class diesel_car : public car {…};
class solar_car: public car {…};
class electric_car : public car {…};
car* get_car();
为遵守工厂函数的规矩,返回的对象必须位于heap(否则函数返回的指针在函数返回后将指向一个非法的位置,因为位于stack的对象的生命周期为函数域),因此为了避免内存泄漏,需要客户代码将工厂函数返回的对象适当地delete掉:
car* p_car = get_car(); // 从car继承体系中获得一个动态分配对象
… // 使用这个对象
delete p_car; // 释放这个对象以避免内存泄漏
首先需要说明,上述做法已经存在两个缺陷:
class car
{
public:
car();
virtual ~car();
...
};
- [引申1]
class point
{
public:
point(int coord_x, int coord_y);
~point();
private:
int x, y;
};
- [引申2]
- [引申3]
class abstract_class
{
public:
virtual ~abstract_class() = ;
};
abstract_class::~abstract_class(){}
- [总结]
- [补充]
[Effective C++系列]-为多态基类声明Virtual析构函数的更多相关文章
- [Effective C++ --007]为多态基类声明virtual析构函数
引言: 我们都知道类的一个很明显的特性是多态,比如我们声明一个水果的基类: class Fruit { public: Fruit() {}; ~Fruit(){}; } 那么我们根据这个Fruit基 ...
- Effective C++(7) 为多态基类声明virtual析构函数 or Not
问题聚焦: 已经对一个对象执行了delete语句,还会发生内存泄漏吗? 先来看个demo: // 计时器类 class TimeKeeper { public: TimeKeeper(); ~Time ...
- 为多态基类声明virtual析构函数
一个函数的返回值为基类指针,而当指针指向一个派生类对象,接下来派生类对象被这个基类指针删除的时候,就出现了局部销毁的问题.因为C++指出,当派生类经由一个基类指针被删除,而该基类指针带着一个non-v ...
- effective c++(07)之为多态基类声明virtual析构函数
class TimeKeeper { public: TimeKeeper() ; ~TimeKepper() ; ... } ; class AtomicClock:public TimeKeepe ...
- Effective C++_笔记_条款07_为多态基类声明virtual析构函数
(整理自Effctive C++,转载请注明.整理者:华科小涛@http://www.cnblogs.com/hust-ghtao/) 这个规则只适用于polymorphic(带多态性质的)base ...
- Effective C++ -----条款07:为多态基类声明virtual析构函数
polymorphic(带多态性质的)base classes应该声明一个virtual析构函数.如果class带有任何virtual函数,它就应该拥有一个virtual析构函数. Classes的设 ...
- 【C++】为多态基类声明virtual析构函数
来自<Effective C++>条款07:为多态声明virtual析构函数 当derived class对象经由一个base class指针被删除,而该base class带着一个non ...
- 条款7:为多态基类声明virtual析构函数
C++明确指出:当派生类对象是由一个基类指针释放的,而基类中的析构函数不是虚函数,那么结果是未定义的.其实我们执行时其结果就是:只调用最上层基类的析构函数,派生类及其中间基类的析构函数得不到调用. # ...
- NO.6: 为多态基类声明virtual析构函数
注意:polymorphic base class 应该具有虚析构函数,如果class带有任何virtual函数,也应具有虚析构函数 class不具备polymorphic属性则不应该声明virtua ...
随机推荐
- Xcode 中添加 .pch文件
1 新建工程 2 创建 .pch文件 3 在setting里面进行设置:
- 如何循序渐进有效学习 JavaScript?
著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处.作者:宋学彦链接:http://www.zhihu.com/question/19713563/answer/23068003来源: ...
- [转]PictureEx.h和PictureEx.cpp源文件
要显示一个gif,网上找了个,子类化了MFCl图片控件,用着方便,记一下 转自:http://www.bccn.net/Article/net/vcnet/jszl/200709/6386.html ...
- SeekBar和RatingBar
今天在看一个音乐播放器的源代码时候用到了SeekBar,就翻出来mars老师的视频复习了一下,然后综合使用了一下. 首先先看下运行效果: 下来我们看看布局文件的设计: main.xml: < ...
- [ofbiz]解决load-demo花费过长时间的问题
一直以来使用公司配置的hp-cq45笔记本,在初始化ofbiz的时候load-demo需要花费很长一段时间,比如90分钟,或者129分钟. 解决办法:安装官方驱动--intel快速存储驱动 ok,lo ...
- sqlsever连接两个不同服务器上的数据库进行查询
exec sp_addlinkedserver 'LocalSERVER' ,--别名,自己起一个 '' , 'SQLOLEDB' , 'ip' --远程服务器地址 exec sp_addlinked ...
- js智能提示代码
<reference path = "../../../Scripts/jQuery-1.4.1.js"/>
- [TYVJ] P1049 最长不下降子序列
最长不下降子序列 描述 Description 求最长不下降子序列的长度 输入格式 InputFormat 第一行为n,表示n个数第二行n个数 输出格式 OutputFormat 最长不下降子 ...
- 开机时候系统总是提醒Android系统更新
今天刷了个android的rom,平常没有经常刷机,对这个也不是特别了解. 但是刷完开机,显示系统升级,一开始都是18个app,后来捣鼓了几次,安装了几个常用的软件,居开机的时候,升级的app需要90 ...
- CEF3 怎样禁止右键菜单
CEF3 怎样禁止右键菜单 (2013-07-30 11:56:34)转载▼标签: cef3 右键菜单 分类: CEF3问题描述:CEF3 嵌入成功后,在网页点鼠标右键,出现英文菜单,应该怎样禁止掉呢 ...