重载赋值运算符C++;传递非常量参数 我在大学里用C++构建了自己的数据结构,我遇到了“队列”数据结构的问题。 特别是当我试图像这样重载赋值运算符时: Queue& operator=(Queue& C){ if(this != &C){ elements = new element_type[C.maxlength]; maxlength = C.maxlength; length = C.length; head = C.head; if(!C.emptyQueue()){ for(int i=0; i<length; i++){ pushQueue(C.readQueue()); } C.pushQueue(C.readQueue()); C.popQueue(); } } return *this; } Queue&operator=(Queue&C){ 如果(此!=&C){ 元素=新元素类型[C.maxlength]; maxlength=C.maxlength; 长度=C.长度; 头=C.头; 如果(!C.emptyQueue()){ 对于(int i=0;i

重载赋值运算符C++;传递非常量参数 我在大学里用C++构建了自己的数据结构,我遇到了“队列”数据结构的问题。 特别是当我试图像这样重载赋值运算符时: Queue& operator=(Queue& C){ if(this != &C){ elements = new element_type[C.maxlength]; maxlength = C.maxlength; length = C.length; head = C.head; if(!C.emptyQueue()){ for(int i=0; i<length; i++){ pushQueue(C.readQueue()); } C.pushQueue(C.readQueue()); C.popQueue(); } } return *this; } Queue&operator=(Queue&C){ 如果(此!=&C){ 元素=新元素类型[C.maxlength]; maxlength=C.maxlength; 长度=C.长度; 头=C.头; 如果(!C.emptyQueue()){ 对于(int i=0;i,c++,queue,C++,Queue,您的复制赋值运算符实际上是一个移动,而不是复制赋值 使用移动分配: Queue& operator=(Queue&& C){ 这应该是什么任务?如果您修改原始队列,实际上是从队列中删除所有项目,那么它应该是一个移动任务,而不是。这里有一些需要考虑的问题。通常,当我们编写a=b时,我们不希望b因此而改变。您编写的代码打破了这一预期。哦谢谢,我看到使用you解决方案非常有效。那么移动和分配之间有什么区别呢?我的意思是,在main.cpp中,我在两个队列之间进行分配,为什么我

您的复制赋值运算符实际上是一个移动,而不是复制赋值

使用移动分配:

Queue& operator=(Queue&& C){

这应该是什么任务?如果您修改原始队列,实际上是从队列中删除所有项目,那么它应该是一个移动任务,而不是。这里有一些需要考虑的问题。通常,当我们编写
a=b
时,我们不希望
b
因此而改变。您编写的代码打破了这一预期。哦谢谢,我看到使用you解决方案非常有效。那么移动和分配之间有什么区别呢?我的意思是,在main.cpp中,我在两个队列之间进行分配,为什么我不能称之为分配呢?正如其他评论所说,如果您更改原始对象
b
,这不是分配,如果您转移da,这就是移动ta从
b
a
。它既不是移动也不是赋值,而是“移动赋值”。另一种选择是“复制赋值”。