Effective C++ 随笔(4)
条款21:必须返回对象时,别妄想返回其reference
例子:
Raional类可以执行有理数的一些运算,并且使用heap内存申请 并且其operator*函数为
const Rational& operator*(const Rational& lhs,const Rational& rhs){ Ratinal* result = new Rational(.....); return * result; }
在函数中进行了heap内存申请,因此返回引用时没有问题的,但是问题在于下面
Rational w,x,y,z; w=x*y*z; 即 w = x*(y*z)
返回的指针无法获得,从而造成内存的泄露,因此这里只能采用返回对象的方式
const Rational operator*(const Rational& lhs,const Rational& rhs){ return Rational(......); }
条款22:将成员变量声明为private
条款23:宁以non-member,non-friend 替代member函数
可以将两者放到同一个namespace当中
namespace{ void function(); class class1{ }; }
条款24若所有参数皆需类型转换,请为此采用non-member函数
同样为Rational类,现在要执行
const Rational tmpe(2);
(1)result= tmp*2;
(2)result= 2*tmp;
(1)没有问题(2)确实有问题的,因为2不是一个对象,只是一个基本类型
如果这里把乘法的实现变为一个non-member函数,上面的两种调用都是可行的
const Rational operator*(const Rational & a,const Rational & b){ return ......; }
这是可以找到上述函数,从而可以每一次序的对两只进行隐式类型转化
posted on 2015-05-09 21:55 lightblueme 阅读(120) 评论(0) 编辑 收藏 举报