我知道如果我有一个带有智能唯一指针的类,则无法将该类分配给另一个实例,因为无法复制唯一指针。我知道我可以使唯一指针成为共享指针,这将解决问题。但是如果我不想共享指针的所有权怎么办?是否可以创建一个赋值运算符来移动唯一指针并复制其他变量?

我读过您可以使用 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/

10-11 23:13
查看更多