簡體   English   中英

C ++返回對動態分配對象的引用

[英]c++ return a reference to a dynamically allocated object

在C ++中,我可以通過引用返回對象unit ,而不是返回指針嗎?

您可以,但您不可以。 如果返回對對象的引用,則會丟失該對象的指針,因此有人需要對其調用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;
}

現在,您擁有了指針的所有權,並且當指針超出調用站點的范圍時,資源將被正確清理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM