立即返回新对象有什么区别?

时间:2020-08-10 18:22:34

标签: c++ class pointers

这两者之间有什么区别?

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

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

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

3 个答案:

答案 0 :(得分:1)

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

如果您正在使用交互式调试器,则第一个很有用。新版本完成后,只需检查对象(单击tmp(或在调试控制台中键入print tmp),然后查看是否已正确初始化即可。

这不是您经常执行的操作,但是会出现。

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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