effective C++ 读后笔记

首先不得不说侯捷翻译的书大部分我都很喜欢,因为侯捷本身是一名出色的C++技术专家。这本书讲的是C++如何高效的运行,我想要成为一名卓越的开发人员,代码的高效性是必不可少的。很多人的代码质量很差,即使能够勉强运行在以后的维护和重新编码中存在着巨大的问题,甚至是日后的运行投入中会遇到致命的错误。

条款01:视C++为一个语言联邦而不是单一一门语言:其可以分为如下几种语言 C、 Object—Oriented C++(封装、继承、多态、虚函数)、Template C++(泛型编程)、STL。C++的高效编程取决于我们使用C++的哪一部分。

条款02:尽量以const,enum,inline替换#define

条款03:尽可能使用const 它可以在class外部修饰global或namespace作用域中的常量,或修饰文件函数或者区块作用域中被声明为static的对象。也可以用它修饰class内部的static和non-static成员变量。面对指针,你也可以指出指针自身、指针所指物,或两者都是(或都不是)const,const出现在星号左边,则表示被指物是常量,如果const出现在星号右边则指针自身是常量。

条款04:确定对象被使用之前已被初始化 内置类型意外的任何其他东西,初始化的责任都落在构造函数身上:规则很简单,确保每一个构造函数都将对象的每一个成员初始化。构造函数最好使用成员初始列,而不要再构造函数本体内使用赋值操作。为免除“跨编译单元之初始化次序”问题,请以local static 代替 non-local static对象。

条款05:了解C++默默编写并调用哪些函数 就是说编译器自动补充了些什么在你只写了一些简单代码的时候比如你写了class XCoderLiu{};

就相当于写了下面这样的代码

1 class XCoderLiu{
2 public:
3 XCoderLiu(){...}
4 XCoderLiu(const XCoderLiu& rhs){...}
5 ~XCoderLiu(){...}
6 XCoderLiu& operator=(const XCoderLiu& rhs){...}
7 };

 编译器可以暗自为class创建default构造函数、copy构造函数、copy assignment操作符,以及析构函数。

条款06:不想使用编译器自动生成的函数应该明确拒绝 为驳回编译器自动提供的机能,可将相应的成员函数声明为private并且不予实现。(貌似编译器提供的默认拷贝函数总是多多少少存在一些问题还是自己写比较好)

条款07:为多态基类声明virtual析构函数 任何class只要带有virtual函数几乎确定应该也有一个virtual析构函数

条款08:别让异常逃离析构函数 如果某个操作可能在失败时抛出异常,而又存在某种需要必须处理该异常,那么这个异常必须来自析构函数意外的某个函数。因为当系统存在两个以上的异常时候会出现不明确的错误,析构函数绝对不能吐出异常

条款09:绝对不在构造和析构函数中调用virtual函数 因为这类调用从不下降至derived class

条款10:令operator = 返回一个reference to *this (this指针的引用)

条款11:在operator=中处理“自我赋值”  if(this == &rhs) return *this; 

条款12:复制对象时勿忘其每一个成分 当你自己声明拷贝函数时编译器似乎被冒犯一样当你的实现代码几乎必然出错的时候却不告诉你。另外不要尝试在一个拷贝函数中实现另一个拷贝函数,应该将共同机能放进第三个函数中,并由两个拷贝函数共同调用。

条款13:以对象管理资源,在拷贝构造函数或者拷贝分配操作符复制它们,他们会变成null,而复制所得的指针将取得资源的唯一拥有权。

条款14:在资源管理类中小心coping行为 资源取得时机便是初始化时机

条款15: 在资源管理类中提供该对原始资源的访问 对原始资源的访问可能经由显示转换和隐式转换 一般而言显式转换比较安全 但是隐式转换对客户笔记哦啊方便。

条款16:成对地使用new和delete时要采用相同形式 

条款17:以独立语句将newed对象置于智能指针 如果不这样做 一旦异常被抛出 有可能导致难以察觉的错误

条款18:

 

 

 

 

转载于:https://www.cnblogs.com/XCoderLiu/p/3532324.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/460587.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【百度地图API】如何制作班级地理通讯录?LBS通讯录

原文:【百度地图API】如何制作班级地理通讯录?LBS通讯录摘要:班级通讯录必备的功能,比如人员列表,人员地理位置标注,展示复杂信息窗口,公交和驾车等。一般班级人员都不会超过300个,因为可以高效…

开发板——在X210开发板上进行裸机开发的流程

流程总结 本文以“LED流水灯”为例,说明在X210开发板上进行裸机开发的流程。 步骤一:搭建嵌入式Linux开发环境 在虚拟机中安装与配置Linux系统,并安装交叉编译工具链; 在win主机上安装dnw软件、九鼎烧写SD卡软件等内容。 步骤二&a…

zmail邮件系统安装手册 V2.0版本

2019独角兽企业重金招聘Python工程师标准>>> Tmail邮件系统安装手册 V2.0版本 1、系统环境 centos6.0以上,最小化安装(64位系统) 2、部署 1、删除自带的postfix、mysql、httpd # rpm -qa|grep postfix|xargs rpm -e --nodeps # rpm -qa|grep mysql|xargs…

Cassandra1.2文档学习(5)—— Snitch

参考资料:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/architectureSnitchesAbout_c.html#concept_ds_c34_fqf_fk 一个snitch(告密者)决定应当从哪个数据数据中心和机架写入和读取数据。…

Entity Framework在WCF中序列化的问题(转)

问题描述 如果你在WCF中用Entity Framework来获取数据并返回实体对象,那么对下面的错误一定不陌生。 接收对 http://localhost:5115/ReService.svc 的 HTTP 响应时发生错误。这可能是由于服务终结点绑定未使用 HTTP 协议造成的。 这还可能是由于服务器中止了 HTTP …

【iHMI43 4.3寸液晶模块】demo例程(版本1.03)发布

技术论坛:http://www.eeschool.org 博客地址:http://xiaomagee.cnblogs.com 官方网店:http://i-board.taobao.com 银杏科技 GINGKO TECH. 保留权利,转载请注明出处 一、简介: 1、iHMI43 演示程序(版本号:1…

SDRAM——X210的SDRAM的初始化

以下内容源于朱友鹏嵌入式课程的学习与整理,如有侵权请告知删除。 参考博客:s5pv210——初始化SDRAM - biaohc - 博客园 这里说的SDRAM,简单点理解就是内存。 一、SDRAM的简介 1、SDRAM的含义 SDRAM是Syncronized Dynamic Ramdam Access Me…

安卓开发.四大组件.activity.1

安卓开发.四大组件.activity.1 转载于:https://www.cnblogs.com/motadou/p/3534056.html

单独一台机器测试Open×××加密隧道的问题和解决

其实这篇文章和Open的关系倒不是很大,只是通过Open测试时暴露出的问题。这篇文章里面倒是包含了很多IP路由以及conntrack的细节内容。 有时候,为了节省机器,我希望在一台设备上模拟多个设备,当然,使用网络命名空…

SCRT中只换行不回车的问题(阶梯)

转载源:SecureCRT中只换行不回车的问题 - 知乎 在SecureCRT中有时会遇到由于Windows的换行和Unix的换行控制字符不同的问题(\r\n-\n),导致显示如下图所示的“阶梯”,又不想到源码中一个个改控制字符,此时可…

Android Training精要(六)如何防止Bitmap对象出现OOM

1.使用AsyncTask異步加載bitmap圖片避免OOM: class BitmapWorkerTask extends AsyncTask<Integer, Void, Bitmap> { private final WeakReference<ImageView> imageViewReference; private int data 0; public BitmapWorkerTask(ImageView imageView) { // Use a …

iOS会议和组织

全世界有许多iOS会议和组织&#xff0c;如果你没有机会去参加&#xff0c;知道他们的存在和向他们学习对你也是有益的。事实上&#xff0c;他们中有些提供免费的幻灯片、视频&#xff0c;有用资料等&#xff0c;所以你不能够忽视他们。 有一些会议的主题并不仅仅关于iOS的&…

开发板——X210开发板的软开关(供电置锁)

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、前言 本章节在裸机课程的SD卡启动部分。 本文讲述如何设置开发板&#xff0c;使得一按下电源键程序运行后即可松手不会断电&#xff0c;即供电置锁。 二、软开关的简介 电路设计一般使用拨码开…

国产Linux软件

为什么80%的码农都做不了架构师&#xff1f;>>> 本页面收集支持deepin/Linux的国产软件&#xff0c;对于每款软件以“日出东方-发行时间较短&#xff1b;正当壮年-时间较长且稳定&#xff1b;每况愈下-你们懂的”评价 软件版本时间评价有道词典 Linux版1.02015-03…

QGLViewer 编译安装步骤

由于工作学习的需要&#xff0c;要用opengl绘制显示些模型动画&#xff0c;原来用的是Qt做UI&#xff0c;直接调用的是QGLWidget类&#xff0c;但这个只是提供了基本的框架&#xff0c;很多交互操作还需添加代码完成&#xff0c;自己偷懒也觉得繁琐&#xff0c;就借用了开源的工…

触摸屏——S5PV210的触摸屏的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有其侵权请告知删除。 一、输入类设备简介 1、input/output 输入输出&#xff0c;是计算机系统中的一个概念。计算机可以看作数据处理器。计算机的主要功能就是从外部获取数据&#xff0c;然后进行计算加工得到输出数据…

搭建nginx流媒体服务器(支持HLS)

环境搭建 &#xff08;一&#xff09;下载源代码 nginx&#xff0c;地址&#xff1a;http://nginx.org/可以选择需要的版本下载 nginx_mod_h264_streaming-2.2.7.tar.gz &#xff0c;支持MP4流&#xff0c;具体的说明在下面的这个网页 http://h264.code-shop.com/trac/wiki/Mod…

Spring中的动态代理

动态代理&#xff1a;指的就是通过一个代理对象来创建需要的业务对象&#xff0c;然后在这个代理对象中统一进行各种需求的处理。 学习完Spring后会发现&#xff0c;Spring中的AOP&#xff08;面向方面编程&#xff1a;Aspect Oriented Programming&#xff09;是个很重要的知识…

LED——S5PV210的LED的理论与操作

以下内容源于朱有鹏嵌入式课程的学习与整理&#xff0c;如有侵权请告知删除。 一、LED物理特性介绍 LED本身有2个接线点&#xff0c;一个是LED的正极&#xff0c;一个是LED的负极。 LED的功能就是亮或者不亮&#xff0c;只需要给LED的正极加电压即可点亮LED&#xff0c;去掉电压…

“.公司”域名注册总量TOP15:新网问鼎 万网居亚

IDC评述网&#xff08;idcps.com&#xff09;01月16日报道&#xff1a;根据ntldstats.com发布的最新数据显示&#xff0c;截止至01月15日17:00&#xff0c;在“.公司”域名注册总量大战中&#xff0c;新网打败众多国内外域名服务商&#xff0c;成为新晋霸主&#xff0c;其“.公…