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)
由于成员()无法复制,test因此删除了默认的class 复制构造函数graph_(如果您仍然可以通过任何有意义的方式进行复制,例如,通过创建graph成员的深层副本,则必须在自己的复制构造函数上实现)。相反,默认的move构造函数仍然存在(std::unique_ptr可移动)。因此,您可以执行以下操作:
test t1;
auto t2 = std::move(t1);
Run Code Online (Sandbox Code Playgroud)
但是请注意,t1此后将不再容纳任何对象(您移动了对象,因此将其内容移动到了另一个对象),并且先前由持有的对象t2被破坏了。如果这是有意义的状态,则由您决定...
旁注:我写的有关复制和移动构造函数的内容也适用于复制和移动分配...