重新讨论返回局部对象的引用问题。
之前开了一贴,但是似乎我的表述不到位,现在重新开一贴描述:
首先,我明白,程序是不能返回局部变量的引用的,因为局部变量会被释放,从而使得对应的引用变为垃圾数字,比如下面这个例子:
class Test
{
public:
Test(int numerator, int denominator):n(numerator), d(denominator){cout<<"构造函数"<<endl;}
double getValue(){ double result = (double)n/(double)d;return result;}
~Test(){cout<<"析构函数"<<endl;}
Test &operator=(const Test& rhs)
{
n = rhs.n;
d = rhs.d;
return *this;
}
Test(const Test& rhs):n(rhs.n),d(rhs.d){}
private:
int n;
int d;
friend const Test& operator*(const Test &lhs, const Test &rhs);
};
const Test& operator*(const Test &lhs, const Test &rhs)
{
Test result(lhs.n * rhs.n, lhs.d * rhs.d);
return result;
}
那么我在main函数:
Test a(1,2);
Test b(1,5);
Test c ( a * b);
cout<<c.getValue()<<endl;
return 0;
的确会得到不合理的结果。
可是我的问题是,假如我把自己编写的复制构造函数Test(const Test& rhs):n(rhs.n),d(rhs.d){}去掉,那么这个看似不合理的operator*又能得出正确的结果了。
我想知道这是为什么?为什么去掉复制构造函数以后又能莫名其妙的得出正确的结果。希望高手能给我一个比较“对题”的解释。
[解决办法]
重新讨论返回局部对象的引用有关问题
重新讨论返回局部对象的引用问题。之前开了一贴,但是似乎我的表述不到位,现在重新开一贴描述:首先,我明白,
