[英]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_ptr
或unique_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.