我写了一些不抛出异常但却使用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相比,异常是“昂贵的” ……别的……
我不确定是否有一个特定的术语“我的类不会抛出异常,但使用可能的标准库”.