我知道如果我有一个带有智能唯一指针的类,则无法将该类分配给另一个实例,因为无法复制唯一指针。我知道我可以使唯一指针成为共享指针,这将解决问题。但是如果我不想共享指针的所有权怎么办?是否可以创建一个赋值运算符来移动唯一指针并复制其他变量?
我读过您可以使用 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;
}
最佳答案
由于成员( test
)不可复制,类 graph_
的默认复制构造函数被删除(如果您仍然可以以任何有意义的方式复制,例如通过创建图形成员的深层拷贝,您必须自己实现复制构造函数)。相比之下,默认的移动构造函数仍然存在(std::unique_ptr
是可移动的)。所以你可以做的是:
test t1;
auto t2 = std::move(t1);
但是请注意,
t1
将不再持有任何对象(您移动了该对象,因此您将其内容移动到另一个)并且先前由 t2
持有的对象将被销毁。如果这是一个有意义的状态由你决定......旁注:我写的关于复制和移动构造函数的内容也适用于复制和移动赋值......
关于包含唯一指针成员变量的类的 C++ 赋值运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55743888/