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

Posted Kooing

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了读书笔记_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

以上是关于读书笔记_Effective_C++_条款二十一:当必须返回对象时,别妄想返回其reference的主要内容,如果未能解决你的问题,请参考以下文章

读书笔记_Effective_C++_条款二十五: 考虑写出一个不抛出异常的swap函数

读书笔记_Effective_C++_条款二十三:宁以non-membernon-friend替换member函数

读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数

读书笔记_Effective_C++_条款十五:在资源类管理类中提供对原始资源的访问

读书笔记_Effective_C++_条款十七:以独立语句将new产生的对象置入智能指针

Android开发笔记(二十一)Room 创建和使用