【发布时间】:2019-04-18 10:15:03
【问题描述】:
我了解,如果我有一个具有智能唯一指针的类,则无法将该类分配给另一个实例,因为无法复制唯一指针。我知道我可以使唯一指针成为共享指针,这将解决问题。但是,如果我不想共享指针的所有权怎么办?是否可以创建一个赋值运算符来移动唯一指针并复制其他变量?
我了解到您可以使用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结合使用;我们需要搬家以便重新分配。 -
您可以创建一个移动赋值运算符来移动所有内容(在这种情况下,使用
test& operator=(test&& other) = default;),但这也会移动向量而不是复制它。如果您手动实现它,您可以按照您的要求去做(您是否会因为尝试而陷入困境),但它不会像大多数使用您的课程的人所期望的那样,所以我强烈建议不要这样做。 -
另外,在
main中,您从不使用赋值运算符。第二行调用复制构造函数(由于unique_ptr而被隐式删除),而不是复制赋值运算符,即使它使用=语法。 -
您可能想复制另一个对象的
Graph_拥有的GraphStructure,而不是窃取它。这是赋值的“正常”行为(和初始化,这就是你正在做的事情),如果你使用原始指针,你会做什么。
标签: c++ unique-ptr assignment-operator