C++编码中削减内存缺陷的办法和工具[VC/C++编程]
本文“C++编码中削减内存缺陷的办法和工具[VC/C++编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
C++语言是桌面系统,特别是系统软件、大型利用软件的主流开辟语言.C++语言以其机动性著称,同时也更复杂.操纵C++编写结实的代码,更具有挑衅性.C++答应动态内存管理, 同时也简单招致更多和内存相关的问题.普通而言, 除了系统计划上的缺陷, 基于C++的软件的缺陷和错误大部份都和内存缺陷(主要包含内存拜候错误和内存泄露两类)相关. 所以,消除代码中的内存相关缺陷,成为程序员编写、调试、保护代码中的任务,也是保证软件质量的关键.
本文的工作基于“863”筹划项目“面向网络海量空间信息的大型GIS”课题.该系统是基于C++/MFC编写,开辟环境是Visual Studio .net 2003.本文基于此项目的工程实践,总结了若何利用C++语言机制、开辟环境和相关质量保证工具来预防、发现各种编译期、运行期和内存相关的缺陷的办法和工具.
1 遵守C++相关的编码标准和惯用法,预防缺陷
编码标准是语言相关的法则,是经过实践总结出来的经验.杰出的编程尺度将有效地帮忙开辟人员避免开辟有潜在危险的代码.普通来说,为了削减内存缺陷,应当遵守下列编码法则[1]:
(1)基类大概带有虚函数的类应当将其析构函数声明为虚函数.
(2)在构造函数中避免内存泄露,在析构函数中不要抛出非常.
(3)利用对应情势的new和delete.即:用delete来释放new申请的内存,delete[]释放new[]申请的内存.
(4)指针在利用前必须初始化,指向动态内存的指针在释放后该当即置为空.
(5)假如类构造函数中分配了资源,那么需求显式供应拷贝构造函数和赋值操作符,并且在析构函数中释放资源.
值得器重的是C++中的惯用法RAII.RAII核心机惟是操纵对象来管理资源,在对象的构造函数中获得资源,在其析构函数中释放资源[2].为了保证动态申请的内存能在即便呈现非常的情形下仍能释放,对比抱负的办法是利用部分变量来管理动态内存的全部权(ownership),就是所谓的智能指针.STL中的auto_ptr就是为办理资源全部权问题计划的,但是贫乏对引用数和数组的支持并且不能用在STL容器中.Boost库[3]供应的智能指针相对成熟,实用代价高.此中,shared_ptr线程安全并且可以用在STL容器中.具体示例参考文献[3].
1.1 编码标准查抄工具 CodeWizard
CodeWizard可以对源程序直接举行自动扫描、解析和查抄.一旦发现违例,产生信息奉告与哪条法则不符并作出注释.以CodeWizard 4.3 为例,此中内置了超越500条编码尺度.CodeWizard可以挑选关于当前的工程履行哪些编码尺度.CodeWizard可以和VC++精密集成,安装完毕今后,VC++中有CodeWizard工具条.
1.2 代码查抄工具 PC-Lint
PC-Lint可查抄编译器不易发现的错误.PC-Lint可对100多个C库函数举行查抄,可以发现尺度C/C++代码中的1 000多个常见错误.要把PC-lint和Visual Studio集成在一同,需求自己配置.Jon Zyzyck供应了一个报告生成器,可以帮忙完成这个工作.可在http://www.ddj.com下载.文献[4]阐明了如安在VC++环境中集成PC-Lint.
以上是“C++编码中削减内存缺陷的办法和工具[VC/C++编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |