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 C++ 随笔(4)的更多相关文章
- Effective C++ 随笔(5)
		条款27:尽量稍作转型动作 const_cast:常量性移除 dynamic_cast:安全向下转型 reinterpret_cast: static_cast: 如在子类当中享调用父类当中的某个方法 ... 
- Effective C++ 随笔(3)
		条款12: 以对象管理资源 两种只能指针: std:auto_ptr<> 当使用copy操作室,原先的智能指针指向为null std:tr1:share_ptr<int> sp ... 
- Effective C++ 随笔(2)
		条款5 了解c++默默编写并调用哪些函数 编译器自动生成的copy 构造函数,copy赋值操作符,析构函数,构造函数,这些都是public和inline的,此处inline的意思是他们的定义都是在头文 ... 
- Effective C++ 随笔(1)
		条款一 c++ 为一个语言联邦 1.四个层次 C:blocks,语句,预处理器,内置数据类型,数组,指针 面向对象的C++:封装,多态,继承 Template C++ STL 条款二 尽量以const ... 
- Effective Modern C++翻译(1):序言
		/*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内 ... 
- 小王子浅读Effective javascript(一)了解javascript版本
		哈哈,各位园友新年快乐!愚安好久没在园子里写东西了,这次决定针对javascript做一个系列,叫做<小王子浅读Effective javascript>,主要是按照David Herma ... 
- Linux随笔-鸟哥Linux基础篇学习总结(全)
		Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ... 
- AI人工智能系列随笔
		初探 AI人工智能系列随笔:syntaxnet 初探(1) 
- 【置顶】CoreCLR系列随笔
		CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ... 
随机推荐
- 使用PHP来简单的创建一个RPC服务
			RPC全称为Remote Procedure Call,翻译过来为"远程过程调用".主要应用于不同的系统之间的远程通信和相互调用. 比如有两个系统,一个是PHP写的,一个是JAVA ... 
- Java开发MIS系统需要的技术及其作用
			1.后台框架部分,常用spring.struts2(Struts2框架,提供了一种基于MVC体系结构的工程序的开发方法,具有组件模块化.灵活性和重用性等优点,使基于MVC模式的程序结构更加清晰,同时也 ... 
- Liunx      rm
			rm是一个危险的命令,使用的时候要特别当心,尤其对于新手,否则整个系统就会毁在这个命令(比如在/(根目录)下执行rm * -rf,这是一个危险的动作,“ * ”代表任意个字符).所以,我们在执行rm之 ... 
- *jquery操作DOM总结 (原创:最全、最系统、实例展示)
			jquery操作DOM包括八个方面: 一:jquery对DOM节点的基本操作:二:jquery对DOM节点的CSS样式操作:三:jquery遍历DOM节点:四:jquery创建DOM节点:五:jque ... 
- [转载]RPM中SPEC常用路径以及宏变量
			转自:http://blog.csdn.net/txgc1009/article/details/6833764 通过命令rpm --showrc查看实现代码.另外直接通过 rpm --eval &q ... 
- 1.2 Java中的注释
			Eclipse中的快捷键 单行注释 Ctrl+/ 多行注释 Ctrl+Shift+/ 文档注释 Shift +Alt+j /** * @author Lenovo * 文档注释 * ... 
- PHP编程时的规范化命名
			要想成为一名“合格”的程序员,就必须要有良好的编程习惯和规范,这样做的好处有很多,诸如:可以提高代码质量,提高程序的可维护性,提高开发速度和效率等.以下就简要的列出几条日常编写程序时大概要注意的一些“ ... 
- windows无法停止 服务 错误1053 服务没有及时响应
			windows无法停止 服务 错误1053 服务没有及时响应 服务程序.exe -st 
- office 2007,SQL Server 2008,VS2010安装步骤
			office 2007,SQL Server 2008,VS2010的安装顺序是不是office 2007,SQL Server 2008,VS2010呢? 前几天先安装了SQL Server 200 ... 
- vue ui之 iview 事件拦截
			用过easyui的,应该清楚easyui组件有很多before事件拦截,有时候会特别重要. 最近在研究vue的ui组件iview虽然功能也不错,感觉还是没有像easyui那样强大,就比如before事 ... 
