我知道,如果一个类有一个智能独占指针,则不可能将该类分配给另一个实例,因为独占指针无法复制。我知道我可以将唯一指针更改为共享指针,这样就可以解决问题。但是,如果我不想共享指针所有权怎么办?是否可以创建一个赋值运算符来移动唯一指针并复制其他变量?
我已经阅读过,您可以使用
我已经阅读过,您可以使用
std::move
来传递所有权。#include <iostream>
#include <memory>
struct GraphStructure { };
class test {
int a;
std::vector<int> vector;
std::unique_ptr<GraphStructure> Graph_;
};
int main () {
test t1;
auto t2 = t1;
}
t1
变得无用,您想要解决什么确切的问题? - πάντα ῥεῖstd::vector
结合使用时,我们需要移动以进行重新分配。 - Aconcaguatest& operator=(test&& other) = default;
),但这也会移动向量而不是复制它。如果你手动实现它,你可以做你要求的事情(你是否在尝试中卡住了),但它不会像大多数使用你的类的人所期望的那样行为良好,所以我强烈建议不要这样做。 - Daniel Hmain
函数中,您从未使用赋值运算符。第二行调用了复制构造函数(由于unique_ptr
的隐式删除),而不是复制赋值运算符,尽管它使用了=
语法。 - Daniel HGraph_
拥有的GraphStructure
,而不是窃取它。这是赋值(和初始化,也就是你正在做的事情)的“正常”行为,如果你使用原始指针,那么你会这样做。 - molbdnilo