自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(18)
  • 收藏
  • 关注

原创 leveldb 04 SkipList学习

学习了levelDB源码分析-Skiplist 1. 在levelDB里Skiplist是个模板类。 它的声明和定义全部都放在了.h文件中。 普通class一般是把声明和定义分别放到.h和.cpp文件里的,而模板类必须把声明和定义都放到.h文件中。具体原因,参考学习博客 c++ 模板类 声明和定义都放在.h文件的原因. 2. 首先声明了 struct Node,这是前置声明,因为Node类是在

2018-01-02 18:03:53 146

原创 effective C++ 13_以对象管理资源 读书笔记

这里直接抄下作者篇末的总结: 为防止资源泄露,请使用RAII对象,它们在构造函数中获得资源并在析构函数中释放资源。 两个常被使用的RAII classes分别是tr1:shared_ptr和auto_ptr。前者通常是较佳选择,因为其copy行为比较直观。若选择auto_ptr,复制动作会使它(被复制物)指向null。

2017-12-19 17:24:41 111

原创 effective C++ 12_复制对象时勿忘其每一个成分 读书笔记

作者强调了copy构造函数和copy assignment操作符容易犯的错误: 1. 本来工作很好的,但是后来添加了成员变量,而忘记在copy构造函数和copy assignment操作符里添加此新添加成员变量的copy,导致以后就工作不正常了。 2. derived class在copy构造和copy assignment里忘记copy调用父类进行copy。 3. 在copy构造函数里调用c

2017-12-19 17:12:49 155

原创 effective C++ 11_在operator= 中处理"自我赋值" 读书笔记

先把作者的篇末总结抄下来,然后再把作者推荐的做法中的一个代码抄下来。 确保当对象自我赋值时operator=有良好行为。其中技术包括比较”来源对象”和”目标对象”的地址,精心周到的语句顺序,以及copy-and-swap。 确定任何函数如果操作一个以上的对象,而其中多个对象是同一个对象时,其行为仍然正确。

2017-12-19 16:57:01 114

原创 effective C++ 10_令operator=返回一个reference to *this 读书笔记

令赋值(assignment)操作符返回一个reference to this, 这个协议也适用于+=,-=,=等等。

2017-12-19 16:21:57 159

原创 effective C++ 09_绝不在构造和析构过程中调用virtual函数 读书笔记

作者指出的根本原因:在derived class对象的base class构造期间,对象的类型是base class而不是derived class。

2017-12-19 16:16:50 96

原创 effective C++ 08_别让异常逃离析构函数 读书笔记

由于实际在C++的项目中,目前我没遇到过异常处理, 所以该条款我只照抄作者最后的总结。 可以等以后万一遇到异常时,我再多复习此条款。 析构函数绝对不要吐出异常。如果一个被析构函数调用的函数可能抛出异常,析构函数应该捕捉任何异常,然后吞下它们(不传播)或结束程序。 如果客户需要对某个操作函数运行期间抛出的异常做出反应,那么class应该提供一个普通函数(而非在析构函数中)执行该操作。

2017-12-19 16:05:22 100

原创 effective C++ 07_为多态基类声明virtual析构函数 读书笔记

先把作者篇末的总结抄上: polymorphic(带多态性质的)base classes应该声明一个virtual析构函数。如果class带有任何virtual函数,它就应该拥有一个virtual析构函数。 Class的设计目的如果不是作为base classes使用,或不是为了具备多态性(polymorphically),就不该声明virtual析构函数。作者强调了不要继承String,所

2017-12-19 15:40:11 125

原创 effective C++ 06_若不想使用编译器自动生成的函数,就该明确拒绝 读书笔记

作者推荐的做法是制作一个Uncopyable类,然后不想要copy构造函数和copy assignment操作符的类继承这个Uncopyable类。 这样如果有函数里妄图使用该类的构造函数,在编译阶段就会直接报错。如果自己类里面把copy构造函数和copy assignment操作符声明为private,并且不定义它,也是可以的。但是相比上面提到个Uncopyable类技术,编译器报错的阶段是链接

2017-12-19 15:15:29 136

原创 effective C++ 05_了解C++默默编写并调用哪些函数 读书笔记

如果你写了一个空类,编译器可以暗自为class创建default构造函数,copy构造函数,copy assignment操作符,以及析构函数。 作者强调了,编译器为你生成的析构函数是个non-virtual,除非这个class的base class自身声明有virtual析构函数。 我的理解是,你想让自定义的class的析构函数具有virtual属性,必须自己声明virtual。指望从base

2017-12-19 14:59:34 99

原创 effective C++ 04_确定对象被使用前已被初始化 读书笔记

1.读取未初始化的值会导致不明确行为。 2.C part of C++不保证发生初始化,一旦进入non-C parts of C++, 规则有些变化(我个人理解,会保证初始化)。这就很好的解释了为什么array(来自C part of C++)不保证其内容被初始化,而vector(来自STL part of C++)却有此保证。 这里我看到过array创建以后,立马就用memset初始化为0

2017-12-19 14:37:07 129

原创 effective c++ 03_尽可能使用const 学习

const可被施加于任何作用域内的对象,函数参数,函数返回值,成员函数本体。 强调了const修饰指针,可以指出指针自身,指针所指物,或两者都(或都不)是const: char greeting[] = "Hello"; char* p = greeting; /* non-const pointer, non-const data 两者都不是const */ const char* p

2017-12-18 12:10:28 87

原创 effective C++ 2_尽量以const,enum,inline替换#define 的学习

本篇作者强调 “宁可以编译器替换预处理器”. 因为预处理器会先于编译器使用。 从C语言继承来的宏,在预处理阶段会被替换掉。 那么到了编译阶段,使用宏的时候的记号名称有可能没有进入记号表内。 而const, inline,enum可以获得宏带来的效率,以及类型安全性等。 1. 作者介绍了enum hack技术:class GamPlayer { private: enum { Num

2017-12-15 17:58:58 140

原创 effective C++ 01_视C++为一个语言联邦

C Object-Oriented C++ Template C++ STL 记住这四个次语言,当从某个次语言切换到另外一个,高效编程守则需要改变。 平时工作中,我主要是用的Object-Oriented C++. 也会用到一些STL的常用容器。

2017-12-15 15:40:42 107

原创 effective C++ 学习 0_导读

本书目的,摘录如下: 本书的最佳用途就是彻底了解C++如何行为,为什么那么行为,以及如何运用其行为形成优势。 术语 声明式: 对象声明式和函数声明式: extern int x; //对象(object)声明式 std:size_t numDigits(int number); // 函数声明式自定义类型,C++ with class部分: class Widget; //类(cla

2017-12-15 12:27:52 87

原创 leveldb 03 Arena学习

学习了 levelDB源码分析-Arena和leveldb学习:内存池Arena图片是上面第一篇博客里的: 成员变量blocks_是个vector,它的每个元素都是一个char*指针,指向一段内存(或者说是char[]数组). 在Arena的析构函数里,会遍历该vector的每个元素,使用delete[]删除所有分配的内存。 blocks_的主要作用也在于此,保存了分配的所有内存的地址,在Aren

2017-12-14 18:49:28 206

原创 leveldb 02 status学习

学习了 巴山独钓 的levelDB源码分析-Status 1. 主要的声明和inline定义(隐式inline和显式inline关键字定义)都放在了status.h文件中。 只有CopyState,Status和ToString这3个代码比较多和复杂一些的函数放在了status.cc文件中去定义。 2. 发现leveldb中的显式inline都是采用如下形式定义在.h文件中。 我自己的话一般会

2017-12-14 17:50:48 208

原创 leveldb 01 slice 学习

// Copyright (c) 2011 The LevelDB Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. See the AUTHORS file for names of

2017-12-14 17:06:36 192

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除