条款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)的更多相关文章

  1. Effective C++ 随笔(5)

    条款27:尽量稍作转型动作 const_cast:常量性移除 dynamic_cast:安全向下转型 reinterpret_cast: static_cast: 如在子类当中享调用父类当中的某个方法 ...

  2. Effective C++ 随笔(3)

    条款12: 以对象管理资源 两种只能指针: std:auto_ptr<> 当使用copy操作室,原先的智能指针指向为null std:tr1:share_ptr<int> sp ...

  3. Effective C++ 随笔(2)

    条款5 了解c++默默编写并调用哪些函数 编译器自动生成的copy 构造函数,copy赋值操作符,析构函数,构造函数,这些都是public和inline的,此处inline的意思是他们的定义都是在头文 ...

  4. Effective C++ 随笔(1)

    条款一 c++ 为一个语言联邦 1.四个层次 C:blocks,语句,预处理器,内置数据类型,数组,指针 面向对象的C++:封装,多态,继承 Template C++ STL 条款二 尽量以const ...

  5. Effective Modern C++翻译(1):序言

    /*********************************************************** 关于书: 书是我从网上找到的effective Modern C++的样章,内 ...

  6. 小王子浅读Effective javascript(一)了解javascript版本

    哈哈,各位园友新年快乐!愚安好久没在园子里写东西了,这次决定针对javascript做一个系列,叫做<小王子浅读Effective javascript>,主要是按照David Herma ...

  7. Linux随笔-鸟哥Linux基础篇学习总结(全)

    Linux随笔-鸟哥Linux基础篇学习总结(全) 修改Linux系统语系:LANG-en_US,如果我们想让系统默认的语系变成英文的话我们可以修改系统配置文件:/etc/sysconfig/i18n ...

  8. AI人工智能系列随笔

    初探 AI人工智能系列随笔:syntaxnet 初探(1)

  9. 【置顶】CoreCLR系列随笔

    CoreCLR配置系列 在Windows上编译和调试CoreCLR GC探索系列 C++随笔:.NET CoreCLR之GC探索(1) C++随笔:.NET CoreCLR之GC探索(2) C++随笔 ...

随机推荐

  1. html 导出pdf

    地址: https://developers.itextpdf.com/examples/xml-worker/html-lists 主方法: public string Generate(strin ...

  2. MySQL在windows的my-default.ini配置

    my-default.ini分为两块:Client Section和Server Section. Client Section用来配置MySQL客户端参数. 要查看配置参数可以用下面的命令: sho ...

  3. 线特征---LSD算法(二)

    上一节介绍了一些资源和实验结果,这节主要是介绍LSD算法理论. 直线段检测算法---LSD:a Line Segment Detector LSD的核心是像素合并于误差控制.利用合并像素来检测直线段并 ...

  4. gson所需jar包

    共需要四个jar包,分别为: gson-2.0.jar log4j-1.2.17.jar slf4j-api-1.7.10.jar slf4j-log4j12-1.7.10.jar 如果想要进行文件读 ...

  5. MBP 使用笔记

    1.svn下载指令(终端) svn checkout https://svn.openslam.org/data/svn/gmapping 参考:http://blog.csdn.net/q19910 ...

  6. 前端基础之JavaScript day51

    前端基础之JavaScript   JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中) ...

  7. ListView的自定义适配器及其优化(listView序号混乱问题的处理)

    ListView是最常使用的android组件之一,关于listView的优化问题刚刚了解了一些,在这里做出总结. PS:如果想让ListView中的item根据数据内容显示item的大小,需要在it ...

  8. (转)system.badimageformatexception 未能加载文件或程序集

    “/xxxxx”应用程序中的服务器错误. ------------------------------------------------------------------------------- ...

  9. 789A Anastasia and pebbles

    A. Anastasia and pebbles time limit per test 1 second memory limit per test 256 megabytes input stan ...

  10. Introduction to 3D Game Programming with DirectX 11 翻译--开篇

    Direct3D 11简介 Direct3D 11是一个渲染库,用于在Windows平台上使用现代图形硬件编写高性能3D图形应用程序.Direct3D是一个windows底层库,因为它的应用程序编程接 ...