随笔分类 -  读《Effective C++》笔记

摘要:九月的这三周把《Effective C++》重读了一遍,尽量以自己的理解,用最简单的(其实太深入也不会写)的语言把书里面的重点都写了下来。 由于之前找实习占用了大量的时间,写的博客都比较水,这个分类是正式开始比较认真地在写了,今后还会继续记录一些知识点。 这十几篇文章都采用 代码+文字 的方式来叙述 阅读全文
posted @ 2018-10-03 11:10 _NewMan 阅读(233) 评论(0) 推荐(1) 编辑
摘要:条款53:不要轻忽编译器的警告 编译器的作者对一些接下来可能发生的错误的理解一定胜过我们这些普通程序员,如果编译器发出警告,就表明可能存在某种情况会造成一些错误,而这些错误你可能都没想到过。所以我们不要忽略编译器的警告! class Base { public: virtual void f() c 阅读全文
posted @ 2018-10-03 00:02 _NewMan 阅读(188) 评论(0) 推荐(0) 编辑
摘要:条款49:了解new handler的行为 new异常会发生什么事? 在旧式的编译器中,operator new分配内存失败的时候,会返回一个null指针。而现在则是会抛出一个异常。 而在抛出这个异常之前,还会先调用一个客户指定的错误处理函数: 所谓的new handler: set_new_han 阅读全文
posted @ 2018-10-02 11:14 _NewMan 阅读(241) 评论(0) 推荐(0) 编辑
摘要:条款44: 将与参数无关的代码抽离template 如果使用template不当,可能会导致代码膨胀(code bloat): 其二进制码带着重复(或几乎重复)的代码、数据、或两者。但是源码看起来合身而整齐,目标码却不是那么一回事了。 例如一个求逆矩阵的类: template class Squar 阅读全文
posted @ 2018-10-01 21:50 _NewMan 阅读(226) 评论(0) 推荐(0) 编辑
摘要:条款41:了解隐式接口和编译期多态 从一个函数解读隐式接口和编译期多态: template void doProcessing(T &w) { if(w.size() 10 && w != someNastyWidget) { T temp(w); temp.normalize(); temp.sw 阅读全文
posted @ 2018-09-27 10:54 _NewMan 阅读(246) 评论(0) 推荐(0) 编辑
摘要:条款38:根据复合塑模出has a或者“根据某物实现出” 一、复合的概念 复合,是类型中的一种关系,指个某种类型的对象内含它种类型的对象的成员变量。 复合还称为分层(layering),内含(containment),聚合(aggregation)和内嵌(embedding). 二、区别is a和h 阅读全文
posted @ 2018-09-25 16:30 _NewMan 阅读(271) 评论(0) 推荐(0) 编辑
摘要:条款35:考虑virtual函数以外的其他选择 在这个条款里面讨论virtual函数的替代方案。文中主要探讨了两种方式——NVI手法(Template Method模式)和Strategy模式。 一、NVI手法 NVI即Non Virtual Interface。是Template Method设计 阅读全文
posted @ 2018-09-25 14:41 _NewMan 阅读(251) 评论(0) 推荐(0) 编辑
摘要:条款32:确定你的public继承塑模出is a关系 is a即“是一种”的关系,比如Drive继承自Base,那么我们有: + 每一个Derive对象都是Base对象。Base对象可以派上用场的地方Derive照样可以。 + 但是Derive可以派上用场的地方,Base却无法效劳。因为Derive 阅读全文
posted @ 2018-09-24 10:47 _NewMan 阅读(271) 评论(0) 推荐(0) 编辑
摘要:条款28:避免返回handles指向对象内部成分 通常我们说的内部成分就是它的成员变量或者非public的成员函数。 一、为何要做此避免 书上的例子很好的解释了为什么不返回对象内部成分。 首先有一个坐标类, class Point { public: Point(int x, int y); voi 阅读全文
posted @ 2018-09-21 14:00 _NewMan 阅读(242) 评论(0) 推荐(0) 编辑
摘要:概述 本章讲述代码的实现细节。包括: + 变量的定义时机。太快变量的定义往往会造成效率上的拖延。 + 过度转型。过度的转可能导致代码变得又慢又难维护,以及微妙的难以理解的错误。 + 返回对象“内部数据之号码牌”会破坏封装以及产生“虚吊的号码牌”。 + 异常引起的资源泄漏,数据败坏。 + 过度inli 阅读全文
posted @ 2018-09-20 15:39 _NewMan 阅读(214) 评论(0) 推荐(0) 编辑
摘要:条款24:若所有的参数皆需类型转换,请为此采用non member函数 对于能够隐式转换的,我们要得知其危险性。否则将会发生你从未考虑到的错误。用我们一直在用的分数相乘的例子来看: class Rational { public: Rational(int numberator = 0, int d 阅读全文
posted @ 2018-09-20 09:47 _NewMan 阅读(302) 评论(0) 推荐(0) 编辑
摘要:条款21:必须返回对象时,别妄想返回其reference 看下面这个类,是一个表现分数相乘的class: class Rational { public: Rational(int numerator = 0, int denominator = 1); const Rational operato 阅读全文
posted @ 2018-09-18 15:46 _NewMan 阅读(212) 评论(0) 推荐(0) 编辑
摘要:概述 + 本章主要介绍良好的C++接口的设计和声明。 + 让接口容易被正确使用,不容易被误用。 条款18:让接口容易被正确使用,不易被误用 假如我们设计了以下代码: class Date { public: Date(int month, int day, int year); ... }; 初看此 阅读全文
posted @ 2018-09-17 15:08 _NewMan 阅读(220) 评论(0) 推荐(0) 编辑
摘要:条款16:成对使用new和delete时要采取相同形式 总结起来就是: new一个数组出来的时候,使用delete []来释放资源。 new一个对象出来的时候,使用delete来释放资源。 下面谈谈这样做的本质原因: new和delete操作 当我们new一个对象的时候,发生两件事: (1) 内存被 阅读全文
posted @ 2018-09-13 15:19 _NewMan 阅读(169) 评论(0) 推荐(0) 编辑
摘要:概述 + 资源就是一旦用了它,以后必须还给系统的东西。C++中最常用的资源就是 动态内存分配 。其它的资源还包括 文件描述符器、互斥锁、图形界面中的字型和笔刷、数据库连接、以及网络socket 。 + 无论是哪一种资源,我们都要确保当自己使用完之后还给系统。 条款13:以对象管理资源 1. 资源并没 阅读全文
posted @ 2018-09-11 19:36 _NewMan 阅读(207) 评论(0) 推荐(0) 编辑
摘要:条款09:绝不在构造和析构过程中调用virtual函数 为什么? 作者用了一段简单的买卖订单代码来辅助解释: //交易的base class class Transaction { public: Transaction(); virtual void logTransaction() const 阅读全文
posted @ 2018-09-11 15:06 _NewMan 阅读(197) 评论(0) 推荐(0) 编辑
摘要:条款05:了解C++默默编写并调用哪些函数 直入正题:4个函数。 1. default构造函数。 2. copy构造函数。 3. copy assignment操作符。(operator=) 4. 析构函数。 特点: 1. 它们都是public且inline的。 2. 它们只有在被需要(被调用)时才 阅读全文
posted @ 2018-09-11 15:03 _NewMan 阅读(241) 评论(0) 推荐(0) 编辑
摘要:写在前面 第一遍看《Effective C++》时,在准备暑期实习生的招聘,没有时间好好地捋一下,将一些要点记录下来。现在实习回来,重读此书,并记录一些要点,为今后的复习亦或是学习铺垫。 这篇介绍第一章的4个条款。 条款01:视C++为一个语言联邦 1. C++是一个多重范型编程语言: + 支持过程 阅读全文
posted @ 2018-09-09 11:08 _NewMan 阅读(340) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示