- 热门文章:
- · SDTimes故事: C++ Builder X: 复仇出击 (English)
- · C++初学解惑(4)——构造函数(上)
- · 外包项目中的Leader
- · Toolbar制作菜单条过程详解
- · 非官方消息:TeamB成员对于CBX的释疑解惑
- · 为什么C++编译器不能支持对模板的分离式编译
- · 浏览器集成教学--脚本化浏览器
- · 在VC中所见即所得打印的简易实现
- · 社会进行曲——浅谈计算机语言的发展
- · Windows SDK编程之一 窗口示例程序
- · vc6.0调用excel xp,word 2k
- · 我的使用createremotethread控制excel右键的源程序
类设计系列 --- 析构函数篇
类设计系列 --- 析构函数篇
是否需要自己的析构函数
不管你是不是建立了自己的析构函数,析构函数总是有的(如果需要的话,编译器会免费送你一个)。那么要不要建立自己的析构函数呢?答案非常简单:
1、如果类分配了系统资源而没有相应的自动释放机制,需要进行手工资源释放,那么你需要一个析构函数。注意如果有了自动释放机制,例如auto_ptr所管理的内存,那么就不需要析构函数。
2、如果该类必须或者可以作为基类,那么你需要一个虚拟析构函数,即便他什么也不做。这时为了确保删除基类指针时析构派生类对象。
3、除此以外,没理由建立自己的析构函数,即便是一个空析构函数。
析构函数的注意事项
析构函数最大的注意事项是不能抛出异常,否则任何使用该类的代码都无法做到异常安全。
如果析构函数不是虚拟的,意味着该类不可以作为基类,应明确写出或通过手法实现该约束。譬如以下代码的MyClass就不可再派生。任何类只要加上DI<YourClass>就可防止该类再被派生。
#define DI(x) public virtual NoDerive<x>
template <class T>
class NoDerive
{
friend T;
NoDerive(){}
};
class MyClass : DI(MyClass)
{
};
相关文章:
- · 证书的数字签名和认证
- · 针对QQ1230及2003版的木马程序源代码,兼容win98,2000,不显示进程。
- · 数据结构学习(C++)续——排序【5】归并排序
- · VC常见入门问题总结(一)
- · 表达式求值(上)
- · 表达式求值(中)
- · 表达式求值(下)
- · 利用SNIFFER PRO学习TCP/IP(一)
- · 利用SNIFFER PRO学习TCP/IP(二)
- · 用VC++进行MapX二次开发::之一------地理信息系统概述
- · 用VC++进行MapX二次开发::之二------使用MapX的基石
- · 用VC++进行MapX二次开发::之三------使用MapX工具
- · 有关引用以及LoadBitmap几个容易混淆的问题
- · 打印的简单实现,以及更改打印设置
- · 如何按照线型画粗线
- · 品赏Apache源码中的apr_dbg_log函数
- · Windows MFC编程之一 最简单的MFC程序
- · 如何在BCB中正确链接WinAPI函数AlphaBlend()实现半透明效果
- · 如何在BCB中配置和使用GDI+技术?(附动画实例)
- · 进入windows核心态的通用方法
- · 2003-10-29 致Borland C++开发者社群的公开信 -- J.P. LeBlanc
- · Windows应用程序调试策略(一)
- · Windows应用程序调试策略(二)
- · VC常见入门问题总结(二)
- · Windows GDI中的坐标系一文所涉及的代码
- · C++常用排序算法
- · 常用查找算法
- · 关于字符串的用法和转换补遗:
- · 办公之星控件OA应用开发方案
- · 如何在程序中实现关联指定的文件类型
- · 你需要virtual析构函数吗
- · 平台+插件源代码最新地址
- · GIS在商业活动中的应用
- · Win32 环境下的堆栈(一)
- · 常用查找算法
- · 软件工具——字符串过滤器
- · C++初学解惑(5)——构造函数(中)
- · 浅谈 wxWindows FrameWork
