簡體   English   中英

將std :: unique_ptr傳遞給輔助函數

[英]Passing std::unique_ptr to helper function

這是一種正確的方法嗎?

void helperFunc(MyClass *ptr)
{
    // do something with ptr,
}

unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());

或者我應該使用shared_ptr進行此類操作?

除非您想獲取內存的所有權(在這種情況下,您應該傳遞shared_ptrunique_ptr ),為什么要使用指針呢?

通過引用傳遞。

void helperFunc(MyClass& obj)
{
    // do something with ptr,
}

unique_ptr<MyClass> p(new MyClass());
helperFunc(*p);

當你不想獲得所有權時使用原始指針通常很好,但在這里是不必要的,除非你明確想要允許nullptr (在這種情況下,是的,使用原始指針)。

如果helpFunc獲取所有權,則傳遞std :: shared_ptr或std :: unique_ptr,否則只需通過引用傳遞:

  void helperFunc(MyClass& my_class)
  {
  }

呼叫:

 helperFunc(*p);

當您使用get()函數時,您將獲得一個原始指針並丟失您首先使用unique_ptr類的分配跟蹤。

我會避免使用get() ,除非helperFunc確實是如此微不足道,以至於它不占用指針的所有權,並且可以保證不會泄漏它或在某些其他狀態中留下懸空引用。

如果你真的想將unique_ptr本身傳遞給函數,請看一下: 如何將unique_ptr參數傳遞給構造函數或函數?

暫無
暫無

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

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