效率会高一些,但之后的临时变量删除是个问题,可以参考楼上,不过这样的话又会增加空间和时间的开销,最后孰优孰劣我也不清楚了
而且auto_ptr对象作为STL容器的元素。C++标准明确禁止这样做,否则可能会碰到不可预见的结果。
___________________________________________
知道new是什么意思吗?
new是在堆中申请内存,函数执行完后会销毁栈中的对象,而不是堆中的,new的内存,除非用delete删除,否则一直存在
————————————————————————
代码如下,有问题hi 我
Fraction &Fraction::operator*(const Fraction &a) const
{
Fraction *result=new Fraction();
result->nume=nume*a.nume
result->deno=deno*a.deno;
return *result;
}
换个角度来考虑,所谓“引用”,你也得有一个对象才能引用吧?就拿 x * y 来说好了,x * y 的结果是一个中间值,你如果要让这个中间值是一个引用,但是 x * y 就只有 x y 这两个对象,你引用任何一个,都会使它的值发生改变,这可不是 x * y 的原意啊。
我认为可以参考 pur_e 的方法,但是可以吧 new Fraction 返回的对象指针 (即 x * y 的中间结果) 放入一个静态的 vector
不可以,因为*操作符,返回的一般都是中间值,而不是对某个已知值的引用。按楼上的方法可以返回引用,但是会造成内存泄露。
如:x * y * z。
Effective C++ 明确指出 不支持这种做法 很危险 除非你返回的不是一个局部变量的引用。