c ++ возвращает ссылку на динамически размещенный объект - PullRequest
0 голосов
/ 28 августа 2018

В C ++ я могу вернуть объект unit по ссылке вместо возврата указателя?

1 Ответ

0 голосов
/ 28 августа 2018

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

Теперь у вас есть право владения указателем, и ресурсы будут корректно очищены, когда указатель выйдет из области видимости на сайте вызова.

...