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

时间:2014-05-15 02:17:07

标签: c++ vector overloading

请有人解释为什么在下面的例子中(在while循环中)必须清空当前的向量?如果当前向量已经为空,会发生什么?您是否还举例说明了如何使用重载运算符?这是一种coplien形式。

感谢您清理这些事情。

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;
    }

1 个答案:

答案 0 :(得分:3)

  

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

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

我无法解释为什么他不只是解除分配,然后在循环后调用clear

  

如果当前矢量已经为空,会发生什么?

然后循环将永远不会执行,因为ij将是0,而0不会小于0

  

您是否也举例说明了如何使用重载运算符?

Type t1;
Type t2;
t2 = t1;