读书笔记_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++_条款十五:在资源类管理类中提供对原始资源的访问