第十八章 18.1.3节练习 & 18.1.4节练习
来源:互联网 发布:影像测量仪软件 编辑:程序博客网 时间:2024/05/24 06:19
练习18.7
根据第16章的介绍定义你自己的Blob和BlobPtr,注意将构造函数写成函数try语句块。
解答:
这里可以参考书中的实现,为之前实现的Blob和BolbPtr类的构造函数添加try语句块。
template <typename T>
Blob<T>::Blob(std::initializer_list<T> il) try: data(std::make_share<std::vector<T>>(il)){
// 函数体
} catch (const std::bad_alloc &e){handle_out_of_memory(e);}
练习18.8
回顾你之前编写的个各类,为他们的构造函数和析构函数添加正确的异常说明。如果你认为某个析构函数可能抛出异常,尝试修改代码是的改析构函数不会抛出异常。
解答:
这里需要注意一下为什么析构函数不能抛出异常的问题。
因为析构函数本来就是异常处理的一个环节,如果在析构函数中再出现异常会使得情况变得更加复杂,更加难以处理。
more effective c++提出两点理由(析构函数不能抛出异常的理由):
1)如果析构函数抛出异常,则异常点之后的程序不会执行,如果析构函数在异常点之后执行了某些必要的动作比如释放某些资源,则这些动作不会执行,会造成诸如资源泄漏的问题。
2)通常异常发生时,c++的机制会调用已经构造对象的析构函数来释放资源,此时若析构函数本身也抛出异常,则前一个异常尚未处理,又有新的异常,会造成程序崩溃的问题。
参考:http://col1.blog.163.com/blog/static/1909775192012712102940965/ 0 0
- 第十八章 18.1.3节练习 & 18.1.4节练习
- 第十八章 18.1.1节练习
- 第十八章 18.1.2节练习
- 第十八章 18.1.5节练习
- 第十八章 18.2.4节练习
- 第十八章 18.3.4节练习
- 第十八章 18.2.3节练习
- 第十八章 18.3.3节练习
- 第十八章 18.2.1节练习
- 第十八章 18.2.2节练习
- 第十八章 18.3.1节练习
- 第十八章 18.3.2节练习
- 第十八章 18.3.5节练习
- 第十八章练习一:稀疏数组
- c++primer第五版第十八章练习
- 18.1节练习
- 第五章 5.4.4节练习 & 5.5.1节练习 & 5.5.2节练习 & 5.5.3节练习
- 第十八篇:UI编程练习
- UVALive 6185 高斯消元浮点型模版
- LiSatck.cpp
- hightmaps 按地图显示统计量
- 微信公众平台Js API(WeixinApi)
- 用Linux命令行修图——缩放、编辑、转换格式——一切皆有可能
- 第十八章 18.1.3节练习 & 18.1.4节练习
- 异常
- Java 对象序列化机制详解
- CRC英文维基百科
- cookie和session的总结
- 【费用流】 HDU 1853 Cyclic Tour 费用流 完备匹配(裸题)
- RuntimeExcetion
- Could not create the view: An unexpected exception was thrown. 电脑突然断电,myeclipse非正常关闭,出现错误
- matlab中repmat函数的用法