在C ++中,我可以通过引用返回对象unit
而不是返回指针吗?
答案 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;
}
现在您拥有指针的所有权,并且当指针超出调用站点的范围时,资源将被正确清理。