-1

这两者有什么区别:

try
{
    MyClass* tmp=new MyClass;
    return tmp
}
catch (...)
{
    cout << "Error";
}

try
{
    return new MyClass;
}
catch (...)
{
    cout << "Error";
}

我认为如果在第二个错误中发生错误,它将立即返回并且不会捕获错误,对吗?

4

3 回答 3

1

他们做同样的事情。
并且(很可能)会生成完全相同的代码。

如果您使用的是交互式调试器,第一个虽然很有帮助。新建完成后,更容易检查对象(通过单击tmp(或在调试控制台中键入print tmp))并查看是否已正确初始化。

不是你经常做的事情,但它会出现。

于 2020-08-10T21:47:24.067 回答
0

这两段代码将完成同样的事情。第一个将更容易让您在调试器中查看 tmp 的值或添加一行以在调试时打印其值。

与您的问题无关:您为什么使用新的?通常最好使用 std::unique_ptr 和 std::make_unique 而不是原始指针和 new。std::unique_ptr 还将引用动态分配的 MyClass 实例,但会在超出范围时自动调用 delete,从而降低程序中内存泄漏的可能性。

于 2020-08-10T21:43:02.127 回答
0

两者具有相同的功能。如果在为 MyClass 分配内存时出现错误,try{ } 和 catch(...) 也可以正常工作。

但我个人更喜欢新方法,因为有时我会在返回课程之前做一些事情。

于 2020-08-11T04:19:31.127 回答