在运算符重载中调用析构函数

时间:2016-10-29 07:59:52

标签: c++ oop operator-overloading destructor operator-keyword

这是我的代码。问题是我在析构函数中将类数组赋值为零,当我在程序中执行运算符重载时,析构函数被调用,我的数组会自动赋值为0.

    //Overloading Plus Operator
Array Array::operator +(Array &obj)
{
    for (int i = 0; i < 10; i++)
    {
        this->arr[i] = this->arr[i] + obj.arr[i];
    }

    return *this;
}

//Overloading Minus Operator
Array Array::operator -(Array obj)
{
    for (int i = 0; i < 10; i++)
    {
        this->arr[i] = this->arr[i] - obj.arr[i];
    }

    return *this;
}

//Overloading Assignment Operator
void Array::operator =(Array &obj)
{
    for (int i = 0; i < 10; i++)
    {
        arr[i] = obj.arr[i];
    }

}


//Class Destructor
Array::~Array()
{
    cout << "\n\nDeleting Object " << this->objNum << "\n";
    for (int i = 0; i < 10; i++)
    {
        arr[i] = 0;
    }
    cout << "\n\n";
}

1 个答案:

答案 0 :(得分:1)

当你遇到这种情况时,它有时候是你做错事的一个重要线索。

你是。

您正在实施的功能是operator+,其含义通常是x+y应保持xy不变,并生成一个值为其总和的新对象。 ...

但是,您的实现更像是x += y的实现:将x的值更改为其原始值和{{1}的总和的操作}。

您遇到的问题是这种不匹配的症状。

顺便说一句,你的函数也是const不正确的 - 要修复它,例如,将y声明为

operator+

实际上,如果你另外声明了一个const Array operator +(const Array &obj) const 是正确的并且访问了内部数组的内容,使用这个操作符访问了数组的内容,那么编译器会让你知道你是不应该在operator[]中修改数组的内容。