读书笔记_Effective_C++_条款二十一:当必须返回对象时,别妄想返回其reference

在栈空间的临时成员变量在函数生命期结束后无法传出

friend A& operator*(const A& a, const A& b)
{
    A temp;
    temp.data = a.data*b.data;//a,b的成员变量相乘
    return temp;
}

既然栈空间不行,试试堆空间

friend A& operator*(const A& a, const A& b)
{
    A *temp=new A;
    temp.data = a.data*b.data;//a,b的成员变量相乘
    return *temp;
}

并不可以,因为你可能会忘记自己new的,即使你没有忘记,但出现((a*b)*c)的情况会使你无法delete

A& operator*(const A& a, const A& b)
{
    static A temp = new A;
    temp.data = a.data*b.data;//a,b的成员变量相乘
    return temp;
}

试图以全局变量求得永生,但出现if((a*b)==(c*d))会恒成立

没有办法的时候,pass-by-reference虽好,请别上头,就这回我们老老实实用pass-by-value

posted on   Kooing  阅读(151)  评论(0编辑  收藏  举报

导航

< 2025年1月 >
29 30 31 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31 1
2 3 4 5 6 7 8
点击右上角即可分享
微信分享提示