繁体   English   中英

C ++:抛出异常,使用“新”或不使用?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM