c – 不抛出但依赖于库的类

我写了一些不抛出异常但却使用STL的类,而STL可以抛出异常.例如,在我的类中有一些函数使用std :: vector,std :: list,std :: string.复制字符串或创建向量时,STL可能会抛出,对吧?所以我无法将我的课程描述为免费例外,对吧?

在这种情况下你们做什么?你在try / catch中包装每个函数吗?你怎么形容你的课程?谢谢

解决方法

正确,如果从特定成员函数(包括构造函数,编译器为您提供的隐式调用等)调用的任何内容都可以抛出异常,则成员函数可以抛出异常.所以这不是免费的例外.

至于该怎么做:它实际上取决于你的代码应该做什么,以及“如果它抛出异常你能做什么”.你可能想要把它捕获到某个地方,但是因为最有可能的情况是你做了一些愚蠢的事情和/或内存不足,你很可能无法对这种情况做很多事情. (当然,如果你使用例如带有超出范围值的std :: vector :: at(),那么它将抛出一个异常 – 那就是“做一些蠢事” – 同样也是我做过的一个人有时候,const char * p = 0; …. std:string str(p); – 它当然可能会崩溃而不是抛出异常,但我的编译器似乎从此抛出了bad_something异常).任何这些东西,如果它们不是意图,可能是“你的代码死了”.如果你使用带有错误索引的std :: vector :: at()并且你“想要它”,那么你可能会重新考虑你的设计 – 与if(vec.size()> index相比,异常是“昂贵的” ……别的……

我不确定是否有一个特定的术语“我的类不会抛出异常,但使用可能的标准库”.

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...