将 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));
}
我想在一个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));
}