微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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相比,异常是“昂贵的” ……别的……

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

原文地址:https://www.jb51.cc/c/110743.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐