lightblueme

许多问题需要说清楚就可以&&走永远比跑来的重要

导航

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编辑  收藏  举报