这是正确的方法吗?
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
还是应该使用 shared_ptr 进行此类操作?
这是正确的方法吗?
void helperFunc(MyClass *ptr)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(p.get());
还是应该使用 shared_ptr 进行此类操作?
除非你想获得内存的所有权(在这种情况下你应该传递 ashared_ptr
或 a unique_ptr
),你为什么要使用指针呢?
通过参考。
void helperFunc(MyClass& obj)
{
// do something with ptr,
}
unique_ptr<MyClass> p(new MyClass());
helperFunc(*p);
当您不想获得所有权时使用原始指针通常很好,但在这里没有必要,除非您明确希望允许nullptr
s (在这种情况下,是的,使用原始指针)。
如果 helpFunc 取得所有权,则您传递 std::shared_ptr 或 std::unique_ptr 否则只需通过引用传递:
void helperFunc(MyClass& my_class)
{
}
称呼:
helperFunc(*p);
当您使用这些get()
函数时,您会得到一个原始指针并丢失您使用unique_ptr
该类首先拥有的分配跟踪。
我会避免使用get()
, 除非helperFunc
真的如此微不足道以至于它不拥有指针的所有权,并且可以保证不会泄漏它或在其他状态下留下悬空引用。
如果您真的打算将unique_ptr
自身传递给函数,请查看:如何将 unique_ptr 参数传递给构造函数或函数?