如何解决将unique_ptr所有权从一个类转移到另一个类
我想在一个类A类中创建一个唯一的指针,然后将所有权传递给另一个类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));
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。