Вы можете, но не должны. Если вы возвращаете ссылку на объект, вы теряете, что это указатель, и кто-то должен вызвать 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;
}
Теперь у вас есть право владения указателем, и ресурсы будут корректно очищены, когда указатель выйдет из области видимости на сайте вызова.