码迷,mamicode.com
首页 > 编程语言 > 详细

Effective C++ 随笔(4)

时间:2015-05-09 23:19:10      阅读:208      评论:0      收藏:0      [点我收藏+]

标签:

条款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 C++ 随笔(4)

标签:

原文地址:http://www.cnblogs.com/lightblueme/p/4491270.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!