类的C ++赋值运算符包含唯一的指针成员变量

bla*_*eep 1 c++ unique-ptr assignment-operator

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

我读过您可以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;
 }
Run Code Online (Sandbox Code Playgroud)

Aco*_*gua 5

由于成员()无法复制test因此删除了默认的class 复制构造函数graph_(如果您仍然可以通过任何有意义的方式进行复制,例如,通过创建graph成员的深层副本,则必须在自己的复制构造函数上实现)。相反,默认的move构造函数仍然存在(std::unique_ptr可移动)。因此,您可以执行以下操作:

test t1;
auto t2 = std::move(t1);
Run Code Online (Sandbox Code Playgroud)

但是请注意,t1此后将不再容纳任何对象(您移动了对象,因此将其内容移动到了另一个对象),并且先前由持有的对象t2被破坏了。如果这是有意义的状态,则由您决定...

旁注:我写的有关复制和移动构造函数的内容也适用于复制和移动分配...