我应该使用哪一个?
catch (_com_error e)
or
catch (_com_error& e)
第二。这是我试图引用萨特的话
“按值抛出,按引用捕获”
学会catch
正确:按值(而不是指针)抛出异常
通过引用捕获它们(通常是const
)。这是组合
与异常语义最契合。当再次抛出相同的
例外,更喜欢只是throw;
to throw e;
.
这是完整的第 73 项。按值抛出,按引用捕获。 http://www.informit.com/content/images/0321113586/items/sutter_item73.pdf
避免按值捕获异常的原因是它隐式地复制了异常。如果异常是子类的,那么有关它的信息将会丢失。
try { throw MyException ("error") }
catch (Exception e) {
/* Implies: Exception e (MyException ("error")) */
/* e is an instance of Exception, but not MyException */
}
通过引用捕获通过不复制异常来避免此问题。
try { throw MyException ("error") }
catch (Exception& e) {
/* Implies: Exception &e = MyException ("error"); */
/* e is an instance of MyException */
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)