支持异常机制的编程语言在资源申请释放上比较麻烦,如果保证所有分支情况下资源都能顺利清除,第一种设计如下
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++实现,对于学习计算机科学的学生和想要提升C++编程能力的开发者来说,是一份宝贵的资源。通过结合书中的理论...
在"数据结构与程序设计——C++语言描述"中,我们将会深入学习如何使用C++来实现各种经典的数据结构。 首先,数据结构是计算机存储、组织数据的方式,常见的数据结构包括数组、链表、栈、队列、树和图等。数组是最...
电子书 高质量程序设计指南——C++_C语言(第二版)
面向对象程序设计——c++语言描述(原书第2版).part1
面向对象程序设计——c++语言描述(原书第2版).part2
C++面向对象程序设计——基础、数据结构与编程思想 (第4版)
《C++程序设计教程——设计思想与实现习题代码答案》是一本面向初学者和有一定基础的程序员的教育性资源,旨在帮助读者深入理解和掌握C++编程语言。这本书结合了作者两年的教学实践经验,使得内容既理论严谨又贴近...
面向对象的程序设计语言C++是一种强大的、高效的编程语言,广泛应用于系统软件、应用软件、游戏开发、设备驱动等各个领域。C++是C语言的扩展,它引入了类、对象、封装、继承、多态等核心概念,使得程序设计更加模块...
《C/C++语言硬件程序设计——基于TMS320C5000系列DSP》是一本深入探讨如何使用C和C++编程语言进行数字信号处理(DSP)的专著,特别关注德州仪器(TI)的TMS320C5000系列 DSP 芯片。该书涵盖了从基础概念到高级应用的...
清华大学出版社的数据结构与程序设计C++语言描述英文教材配套的中文版,可以配合平时上课使用,翻译详实,无论是上课还是做作业都会让你事半功倍,不会再因为英文看不懂而影响正常的学习,学弟学妹们觉得好就给个赞...
面向对象程序设计——基于Visual C++:第3章 C++面向对象程序设计.ppt
Richard Johnsonbaugh & Martin Kalin 著 蔡宇辉&李军义 译 c++中的经典之作。大学教材
总之,《数据结构——C++实现》(第二版)的源代码提供了丰富的学习资源,不仅可以帮助初学者建立坚实的数据结构基础,也是经验丰富的开发者巩固和扩展知识的良好参考资料。通过实践和调试这些代码,你将能够更好地...
在展开关于"深入浅出讲解Windows程序设计——Visual+C++课程"的知识点之前,我们首先要了解这门课程的重要性。Windows程序设计是IT行业中一个核心的技术领域,它涵盖了创建、开发、维护和优化运行于Windows操作系统...
C++数据结构与程序设计共959页.pdf
《Visual C++程序设计——基础与实例分析源代码》是一本深入浅出的教程,旨在帮助初学者和进阶者掌握Visual C++编程技术。这本书通过丰富的实例,详细讲解了Visual C++的基础知识和实际应用,是学习C++在Windows平台...