将 unique_ptr 所有权从一个 class 转移到另一个 class

Move unique_ptr ownership from one class to another

我想在一个class、class A中创建一个唯一指针,然后将所有权传递给另一个class、class B。我可以吗做这样的事?

下面的代码让我在 getC 中出错: error: call to deleted constructor of 'std::unique_ptr<C>

我做错了什么?

class A {
...
  void func(shared_ptr<B> Bptr) {
   A_pass = make_unique<C>();
   Bptr->setPass(move(A_pass));
  }
  unique_ptr<C> getC()
  {
    return A_pass;
  }
 unique_ptr<C> A_pass;
};

class B {
...
 void setPass(unique_ptr<C> pass_ptr){
  B_pass = move(pass_ptr);
 }
 unique_ptr<C> B_pass;
}

编辑:更新问题

您的问题没有说明编译器错误发生的位置,但我猜是 getC() 成员函数:

class A {
...
 
  unique_ptr<C> getC()
  {
    return A_pass;
  }
 unique_ptr<C> A_pass;
};

写入的函数试图复制 A_pass,这对于 std::unique_ptr<T> 类型当然是不可能的。

您可以重写它以明确地从源代码中移出(我无法对此进行测试):

unique_ptr<C> A::getC() {
    return A_pass.release();
    // alternative: return unique_ptr<C>(std::move(A_pass));
}