我爱Aspx >> VC.Net >> <b>VC代码的编写和调试</b>5 使用句柄和指针
初始化一个指针时,要么让其指向一个有效的内存地址,要么设为0(空指针),避免指针指向无效地址。回收指针所指对象时要重新初始化这个指针,并且在指针被释放前为空时就对其进行处理。对句柄的处理跟指针一样。
6 用引用而不是指针做参数
用指针做函数的参数可传递一个空指针,很灵活,但也很容易忘了对指针进行初始化。而引用是对象的别名,它必须和有效的对象相关联,不存在空的和没有初始化的引用。当在函数中收到一个引用参数时,可以肯定这是一个有效的对象。程序用引用做参数比用指针做参数更为健壮。
7 强制类型转换(cast)
进行数据类型的强制类型转换时,将会调用相应的构造函数或转换函数来创建一个新类型的临时对象。对指针的正确类型转换可消除一个编译错误,但并没改变指针。强制类型转换破坏了编译器进行类型检查的功能,而这正是编译器查找错误的最有效的机制。为了保证安全性,每一个强制类型转换都需要手工进行类型检查。为尽量避免强制类型转换,你可以:避免使用多态数据类型;使用更加广泛的基类;提供特殊的存取函数;让编译器隐式处理类型转换等措施。
8 使用构造函数和析构函数
构造函数需要分配内存,创建资源或者打开文件,这些运算并不总是成功。构造函数没有返回值,没有直接显示错误的方法。一个常见的方法(在很多MFC类中使用)是把对象创建分为两步:第一步,让构造函数以一种不会出错的方式初始化对象;第二步,让某些初始化函数(如Init或Open)完成工作,这一步可能出错。另一种方法是在构造函数中使用异常:第一步,以不会出错的方式初始化对象;第二步,用可能在try段内出错的代码初始化对象;第三步,在catch代码里面处理异常。如果出现异常,就会在构造函数里清除分配的资源,并且再次抛出异常。
异常处理的一个关键细节就是在栈展开的过程中抛出的异常会终止整个应用程序。在处理异常时经常要调用析构函数,因此析构函数很容易出错,一定要保证析构函数的异常在析构函数中得到处理。要保证基类的析构函数是虚函数。这样,就算对象是一个指向基类的指针,也会调用派生类的析构函数。否则,就会引起资源泄漏(resource leak)。
【我对这篇文章有话说?】
<b>用VC实现拨号上网程序&..[05-21]
<b>深入剖析MFC中Windows消..[05-21]
<b>屏幕取词的原理</b&..[05-21]
<b>一个简单的显示文字控件..[05-21]
<b>VC中给树形控件的图标加..[05-21]
<b>一个简单的显示文字控件..[05-21]
<b>Win32环境下dll编程原理..[05-21]
<b>VB调用C程序的方法—动..[05-21]
<b>C++指针使用方法解惑&l..[05-21]
<b>一个简单的显示文字控件..[05-21]