【发布时间】:2017-01-18 10:24:31
【问题描述】:
我正在开发一个使用存储在 LinkedList 中的多项式的 C++ 项目。我想重载重要的运算符,例如 +、-、*、/。 当函数返回结果时,我遇到了析构函数的一些问题。
Polynomial& Polynomial::operator+(const Polynomial &p){
Polynomial sum = *this;
if (p.list.isEmpty())
return *this;
ListElement *temp = p.list.first;
while (temp){
sum.list.addSorted(temp->data);
temp = temp->next;
}
return sum;
}
这个函数效果很好,但是return sum; 调用了析构函数,我丢失了数据。 Polynomial 类的析构函数调用list.purge(); 释放链表中的动态内存。所有的类和它的方法都很好。
我主要有:
Polynomial p1,p2,sum;
p1.input(); //here I input data for first pol
p2.input();
sum=p1+p2; //I overloaded operator=, it works fine
我必须做什么来“停止”析构函数?我想在屏幕多项式sum 上输出。谢谢!
【问题讨论】:
-
不要通过引用返回局部变量。
-
Polynomial& Polynomial::...->Polynomial Polynomial::... -
operator+破坏其操作的原始值也可能不是一个好主意。为避免这样做,请将此方法声明为const。 -
Ursu,你熟悉三法则吗?如果没有,请阅读What is the Rule of Three?。
-
仅供参考,请参阅en.cppreference.com/w/cpp/language/operators中的“规范实现”