在操作符重载时调用析构函数
Destructor is called in operator overloading
这是我的代码。问题是我在析构函数中将类数组赋值为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
保持x
和y
不变,生成一个新对象,其值为它们的和....
然而,你的实现更像x += y
:一个将x
的值更改为其原始值与y
的和的操作。
你所看到的问题是不匹配的症状。
作为题外话,你的函数也是const不正确的—为了修复这个问题,例如,将operator+
声明为
Array operator +(const Array &obj) const
实际上,如果您另外声明了一个const正确的operator[]
,并且使用此操作符访问了内部数组的内容,编译器会提示您不应该修改operator+
中数组的内容。
相关文章:
- 什么时候调用析构函数
- C++-明确何时以及如何调用析构函数
- C++ 防止在映射中放置()时调用析构函数
- 调用析构函数以释放动态分配的内存
- C++:使用方法调用析构函数的顺序是什么?
- 向量推回调用析构函数时调用析构函数
- 如何在调用析构函数时优雅地停止/销毁带有阻塞调用C++线程?
- C++,我应该调用析构函数吗?
- 如何获取有关在 Clang LibTooling 中调用析构函数的信息?
- 当我从 std::vector 中的新放置调用析构函数时会发生什么?
- 为什么这里不调用析构函数
- 在调用 std::bind 的产品后意外调用析构函数
- 为什么在传递给函数而不是构造函数时调用析构函数?
- 如何在C++中调用析构函数
- 为什么为未删除的对象调用析构函数?
- 调用析构函数时出错
- C++ 在不释放内存的情况下调用析构函数
- 为什么在运算符删除中不调用析构函数?
- C++ 调用析构函数后动态模板队列"double free or corruption (out)"
- 在 postOrderDelete 上调用析构函数时引发的异常