4

这是正确的方法吗?

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

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

还是应该使用 shared_ptr 进行此类操作?

4

3 回答 3

7

除非你想获得内存的所有权(在这种情况下你应该传递 ashared_ptr或 a unique_ptr),你为什么要使用指针呢?

通过参考。

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

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

当您不想获得所有权时使用原始指针通常很好,但在这里没有必要,除非您明确希望允许nullptrs (在这种情况下,是的,使用原始指针)。

于 2013-02-01T11:01:00.987 回答
5

如果 helpFunc 取得所有权,则您传递 std::shared_ptr 或 std::unique_ptr 否则只需通过引用传递:

  void helperFunc(MyClass& my_class)
  {
  }

称呼:

 helperFunc(*p);
于 2013-02-01T10:34:36.053 回答
4

当您使用这些get()函数时,您会得到一个原始指针并丢失您使用unique_ptr该类首先拥有的分配跟踪。

我会避免使用get(), 除非helperFunc真的如此微不足道以至于它不拥有指针的所有权,并且可以保证不会泄漏它或在其他状态下留下悬空引用。

如果您真的打算将unique_ptr自身传递给函数,请查看:如何将 unique_ptr 参数传递给构造函数或函数?

于 2013-02-01T10:35:50.210 回答