C ++返回对动态分配对象的引用

时间:2018-08-28 14:50:45

标签: c++ reference heap

在C ++中,我可以通过引用返回对象unit而不是返回指针吗?

1 个答案:

答案 0 :(得分:2)

可以,但不能。如果返回对该对象的引用,则会丢失该对象的指针,因此有人需要在其上调用delete。如果mv::CompilationUnit是可复制/可移动的,那么我建议您将功能更改为

mv::CompilationUnit getCompilationUnit()
{

    auto unit = mv::CompilationUnit();
    unit.loadTargetDescriptor(mv::Target::ma2480);
    return unit;
}

现在,您只需将对象放在调用站点即可,而不必担心进行任何清理。如果无法按值返回,则应使用std::unique_ptr之类的智能指针,以便获得自动内存管理:

std::unique_ptr<mv::CompilationUnit> getCompilationUnit()
{

    auto unit = make_unique<mv::CompilationUnit>();
    unit->loadTargetDescriptor(mv::Target::ma2480);
    return unit;
}

现在您拥有指针的所有权,并且当指针超出调用站点的范围时,资源将被正确清理。