[英]C++: Throwing exceptions, use 'new' or not?
使用throw new FoobarException(Baz argument);
是否合适throw new FoobarException(Baz argument);
或throw FoobarException(Baz argument);
?
捕获的时候我总是使用catch(FoobarException& e)
“以防万一”但我无法找到一个可靠的答案我是否必须在C ++(Java肯定)中使用new或者它是否只是程序员的偏好。
C ++中的异常应该按值抛出,并通过引用捕获。
所以这是正确的方法:
try
{
throw FoobarException(argument);
}
catch( const FoobarException &ex )
{
cout << ex.what() << endl;
}
不要抛出使用new创建的异常,因为负责删除它的人没有明确定义。 此外,在错误处理期间执行分配可能会抛出另一个异常,从而模糊了原始问题。
您不必通过const引用捕获(非const将正常工作),但我还是喜欢这样做。 但是,您应该始终通过引用(而不是值)来多态地捕获异常。 如果不这样做,则可以切除异常的类型。
除非有一些特殊要求,我总是按值抛出并通过const
引用捕获。 这是因为new
本身也可以抛出异常,在错误处理期间,最好避免可能导致异常的事情。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.