假设我们现在希望一个函数初始化并且返回一个对象:
现在有三种方式
- 返回指针
- 返回Reference
- 返回一个新对象
第一种 返回指针
class Rational{
......
private:
int n;
}
const Rational *operator+(const Rational &lhs,const Rational &rhs){
Rational *result = new Rational(lhs.n + rhs.n); //heap内构造
return *result;
}
这是可以通过编译的,而且小范围的使用不会有问题,但是这会导致资源泄露.
假设我们希望
w = x + y + z ;// 这里会有两次new , 但是我们却无法delete,
第二种 返回Reference
const Rational &operator+(const Rational &lhs,const Rational &rhs){
static Rational result = new Rational(lhs.n + rhs.n); //heap内构造
return result;
}
这看似也没有问题, 只有一个内存块被使用,但是如果我们想要比较两次返回值之间的大小的话,一切就不一样了.
bool operator==(const Rational &lhs,const Rational &rhs)
</