Cas*_*sey 26 c++ exception throw
是否适合使用throw new FoobarException(Baz argument);
或throw FoobarException(Baz argument);
?
在捕捉时我总是使用catch(FoobarException& e)
"以防万一",但我无法找到一个可靠的答案,我是否必须在C++中使用新的或不使用(肯定是Java),或者它只是程序员的偏好.
Sve*_*ven 33
C++中的异常应该按值抛出,并通过引用捕获.
所以这是正确的方法:
try
{
throw FoobarException(argument);
}
catch( const FoobarException &ex )
{
cout << ex.what() << endl;
}
Run Code Online (Sandbox Code Playgroud)
不要抛出使用new创建的异常,因为负责删除它的人没有明确定义.此外,在错误处理期间执行分配可能会抛出另一个异常,从而模糊了原始问题.
您不必通过const引用捕获(非const将正常工作),但我还是喜欢这样做.但是,您应该始终通过引用(而不是值)来多态地捕获异常.如果不这样做,则可以切除异常的类型.
归档时间: |
|
查看次数: |
7263 次 |
最近记录: |