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 ......;

}

这是可以找到上述函数,从而可以每一次序的对两只进行隐式类型转化

 

你可能感兴趣的:(effective)