C++ 重载赋值运算符时,为什么必须清空当前向量?C++;

C++ 重载赋值运算符时,为什么必须清空当前向量?C++;,c++,vector,overloading,C++,Vector,Overloading,有人能解释一下为什么在下面的例子中(在while循环中)必须清空当前向量吗?如果当前向量已为空,会发生什么情况?您还可以举一个简单的例子说明如何使用重载运算符吗?这是一种共同留置权形式 谢谢你清理这些东西 Type& Type::operator =(const Type& p_vector2) { if (this != &p_vector2) { int i = 0; int j

有人能解释一下为什么在下面的例子中(在while循环中)必须清空当前向量吗?如果当前向量已为空,会发生什么情况?您还可以举一个简单的例子说明如何使用重载运算符吗?这是一种共同留置权形式

谢谢你清理这些东西

Type& Type::operator =(const Type& p_vector2)
    {
        if (this != &p_vector2)
        {

            int i = 0;
            int j = vector1.size();
            while (i < j)
            {
                delete vector1[0];
                this->vector1.erase(vector1.begin());
                i++;
            }

            for (unsigned int i=0; i < p_vector2.vector1.size(); i++)
            {
                this->vector1.push_back(vector2.vector1[i][0].clone());
            }
        }

        return *this;
    }
Type&Type::operator=(常量类型&p_向量2)
{
如果(此!=&p_矢量2)
{
int i=0;
int j=vector1.size();
而(ivector1.erase(vector1.begin());
i++;
}
for(无符号整数i=0;ivector1.push_back(vector2.vector1[i][0].clone());
}
}
归还*这个;
}
有人能解释一下为什么在下面的例子中(在while循环中)必须清空当前向量吗

因为作者出于任何原因决定存储指向动态分配内存的指针。现在,他(你)的责任是解除分配这些对象,因为向量无法做到这一点。这可能是个坏主意,但谁知道呢,也许有一个很好的理由

我无法解释为什么他不在循环结束后取消分配然后调用
clear

如果当前向量已为空,会发生什么情况

然后循环将永远不会执行,因为
i
j
将是
0
,并且
0
不小于
0

您还可以举一个简单的例子说明如何使用重载运算符吗

有人能解释一下为什么在下面的例子中(在while循环中)必须清空当前向量吗

因为作者出于任何原因决定存储指向动态分配内存的指针。现在,他(你)的责任是解除分配这些对象,因为向量无法做到这一点。这可能是个坏主意,但谁知道呢,也许有一个很好的理由

我无法解释为什么他不在循环结束后取消分配然后调用
clear

如果当前向量已为空,会发生什么情况

然后循环将永远不会执行,因为
i
j
将是
0
,并且
0
不小于
0

您还可以举一个简单的例子说明如何使用重载运算符吗

有人能解释一下为什么在下面的例子中(在while循环中)必须清空当前向量吗

因为作者出于任何原因决定存储指向动态分配内存的指针。现在,他(你)的责任是解除分配这些对象,因为向量无法做到这一点。这可能是个坏主意,但谁知道呢,也许有一个很好的理由

我无法解释为什么他不在循环结束后取消分配然后调用
clear

如果当前向量已为空,会发生什么情况

然后循环将永远不会执行,因为
i
j
将是
0
,并且
0
不小于
0

您还可以举一个简单的例子说明如何使用重载运算符吗

有人能解释一下为什么在下面的例子中(在while循环中)必须清空当前向量吗

因为作者出于任何原因决定存储指向动态分配内存的指针。现在,他(你)的责任是解除分配这些对象,因为向量无法做到这一点。这可能是个坏主意,但谁知道呢,也许有一个很好的理由

我无法解释为什么他不在循环结束后取消分配然后调用
clear

如果当前向量已为空,会发生什么情况

然后循环将永远不会执行,因为
i
j
将是
0
,并且
0
不小于
0

您还可以举一个简单的例子说明如何使用重载运算符吗



这不会调用
operator=
@Yakk:Derp,已修复,不确定我为什么会这样写。堆栈溢出错误阻止我撤消否决权:显然,如果有人在编辑窗口期间否决权,而您随后进行编辑,则否决权无法撤销。唉,但是我们假设,就像你给出的三行例子,你想把t1的内容放在t2中。那我们为什么要清除t1呢?@Alex:因为t1包含t2的内容。如果向量不包含指向动态分配内存的指针,那么简单的
clear
std::copy
将不会调用
操作符=
@Yakk:Derp,修复了,不确定我为什么要写它。堆栈溢出错误阻止我撤消向下投票:显然,如果有人在编辑窗口中向下投票,然后再编辑,否决票不能取消。唉,但是我们假设,就像你给出的三行例子,你想把t1的内容放在t2中。那我们为什么要清除t1呢?@Alex:因为t1包含t2的内容。如果向量不包含指向动态分配内存的指针,那么简单的
clear
std::copy
将不会调用
操作符=
@Yakk:Derp,修复了,不确定我为什么要写它。堆栈溢出错误阻止我撤消向下投票:显然,如果有人在编辑窗口中向下投票,然后再编辑,否决票不能取消。唉,但是我们假设,就像你给出的三行例子,你想把t1的内容放在t2中。那我们为什么要清除t1呢?@Alex:因为t1包含t2的内容。如果向量不包含指向动态分配内存的指针,则简单的
clear
std::
Type t1;
Type t2;
t2 = t1;