在操作符重载时调用析构函数

Destructor is called in operator overloading

本文关键字:调用 析构函数 重载 操作符      更新时间:2023-10-16

这是我的代码。问题是我在析构函数中将类数组赋值为0,当我在程序中进行操作符重载时,析构函数被调用,数组被自动赋值为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 << "nnDeleting Object " << this->objNum << "n";
    for (int i = 0; i < 10; i++)
    {
        arr[i] = 0;
    }
    cout << "nn";
}

当你像这样陷入困境时,有时这是一个很大的线索,说明你做错了什么。

你是。

您要实现的函数是operator+,其含义一般是x+y保持xy不变,生成一个新对象,其值为它们的和....

然而,你的实现更像x += y:一个将x的值更改为其原始值与y的和的操作。

你所看到的问题是不匹配的症状。

作为题外话,你的函数也是const不正确的—为了修复这个问题,例如,将operator+声明为

 Array operator +(const Array &obj) const

实际上,如果您另外声明了一个const正确的operator[],并且使用此操作符访问了内部数组的内容,编译器会提示您不应该修改operator+中数组的内容。