支持异常机制的编程语言在资源申请释放上比较麻烦,如果保证所有分支情况下资源都能顺利清除,第一种设计如下
void doSomething(){
Node *n = new Node();
try{
//do something
}
catch(...){
delete n;
throw;
}
delete n;
}
在异常和正常的分支条件下都释放资源,这就违背了DRY(don't repeat yourself)原则,我们可以考虑使用栈来代替上面的实现如下
void doSomething(){
Node n;
try{
//do something
}
catch(...){
throw;
}
}
函数退出时栈空间可以得到释放,不用我们去手动释放资源。如果不能不使用指针,可以通过另外的类包装一下资源获得同样效果。
class NodeResource{
Node *n;
public:
NodeResource(){n = new Node();}
~NodeResource(){delete n;}
//重载运算符方便调用Node结构体的属性
Node *operator->() {return n;}
};
void doSomething(){
NodeResource n;
try{
//do something
}
catch(...){
throw;
}
}
C++标准库中提供模板类auto_ptr,能自动包装动态分配的对象,程序结束后会自动释放
#include<memory>
void doSomething(){
auto_ptr<Node>n (new Node);
try{
//access the Node as n-> ...
}
catch(...){
throw;
}
//Node automatically deleted at end
}
分享到:
相关推荐
数据结构与程序设计——C++语言描述(答案解析) 英文版本 要的下!
数据结构与程序设计—— C++描述(高等教育出版社) Bobert L.Kruse Alexander J.Ryba
面向对象的程序设计语言——C++ 面向对象的程序设计语言——C++ 面向对象的程序设计语言——C++ 面向对象的程序设计语言——C++
面向对象的程序设计语言——C++课件 第二版(陈志泊 )
数据结构与程序设计——C++语言描述随书源代码,1~6单元的
电子书 高质量程序设计指南——C++_C语言(第二版)
林锐的高质量程序设计指南——C++/C语言,绝对的PDF完全版。
面向对象程序设计——c++语言描述(原书第2版).part1
C_C++语言硬件程序设计——基于TMS320C5000系列DSP
面向对象程序设计——c++语言描述(原书第2版).part2
C++面向对象程序设计——基础、数据结构与编程思想 (第4版)
1.结构化程序设计方法与面向对象程序设计方法的各自特点、区别和相互联系。 2.面本向对象的程序设计方法中的有关概念,如类、对象、封装、继承、消息和多态性等。 3.C++程序的基本组成和框架结构。 4.掌握C++...
面向对象的程序设计语言——C++课件 第二版(陈志泊 )
《高质量程序设计指南——C++ C语言(第3版)》.pdf 扫描版 个人觉得很经典的一本书,有时间可以仔细看看,分享给大家! 仅限自学,勿用于商业用途!
由浅入深的介绍开发程序时,会遇到的各种问题,培养好的编程习惯,适合广大程序员朋友,提高自身的水平,
清华大学出版社的数据结构与程序设计C++语言描述英文教材配套的中文版,可以配合平时上课使用,翻译详实,无论是上课还是做作业都会让你事半功倍,不会再因为英文看不懂而影响正常的学习,学弟学妹们觉得好就给个赞...
面向对象的程序设计语言——C++_第二版-习题参考答案.pdf
谭浩强一直以来的风格,浅显易懂,面向对象程序设计!