这两者有什么区别:
try
{
MyClass* tmp=new MyClass;
return tmp
}
catch (...)
{
cout << "Error";
}
和
try
{
return new MyClass;
}
catch (...)
{
cout << "Error";
}
我认为如果在第二个错误中发生错误,它将立即返回并且不会捕获错误,对吗?
他们做同样的事情。
并且(很可能)会生成完全相同的代码。
如果您使用的是交互式调试器,第一个虽然很有帮助。新建完成后,更容易检查对象(通过单击tmp
(或在调试控制台中键入print tmp
))并查看是否已正确初始化。
不是你经常做的事情,但它会出现。
这两段代码将完成同样的事情。第一个将更容易让您在调试器中查看 tmp 的值或添加一行以在调试时打印其值。
与您的问题无关:您为什么使用新的?通常最好使用 std::unique_ptr 和 std::make_unique 而不是原始指针和 new。std::unique_ptr 还将引用动态分配的 MyClass 实例,但会在超出范围时自动调用 delete,从而降低程序中内存泄漏的可能性。
两者具有相同的功能。如果在为 MyClass 分配内存时出现错误,try{ } 和 catch(...) 也可以正常工作。
但我个人更喜欢新方法,因为有时我会在返回课程之前做一些事情。