gpt4 book ai didi

C++:抛出异常,是否使用 'new'?

转载 作者:IT老高 更新时间:2023-10-28 12:53:29 27 4
gpt4 key购买 nike

使用 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 可以正常工作),但我还是喜欢这样做。但是,您应该始终通过引用(而不是通过值)以多态方式捕获异常。如果不这样做,异常的类型可能会被切片。

关于C++:抛出异常,是否使用 'new'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6801796/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com