effective c++读书随记

一 View C++ as a federation of languagec++

  c++ 能够当作4部分组成:多线程

    1. c  
    2. Object-Oriented c++
    3. Template c++
    4. STL

二 Perfer consts, enums, inlines to #defines函数

  1. *左表示所指不能改变,*右则表示指针不能改变
  2. 类中的专属常量(static const)为了只有一份拷贝一般加static,所以须要类外增长一个定义式(类中是申明)
  3. 类中的常量也能够用 the enum hack 的方法定义
  4. template inline函数能够替换宏函数

三 Use const whenever possiblethis

  1. passed by pointer-to-const passed by reference-to-const
  2. bitwise constness 和 logical constness(const成员函数)
    1. 前者要求函数内部不能改变类对象,后者要求使用该类的人感觉不到其改变了类对象(mutable私有变量)
    2. 提供成员函数的const,non-const版本为避免代码重复,能够用non-const调用const成员函数的方法(static_cast,const_cast)
    3. 注意const成员函数返回值是否须要为const

四 Make sure that objects are initialized before they're used线程

  1. 构造函数使用成员参数列表初始化变量(对于类中存在const,引用时必须如此)
  2. 将non-local static 变成 local static 对象(经过专属factory函数),能够避免纠结多个不一样类对象之间不明确的初始化顺序,由于它会在使用时初始化
  3. 对于多线程,为了消除与初始化的竞争关系,能够在启动多线程前把全部reference-returning

五 Know what functions C++ silently writes and calls指针

  1. copy constructor, copy assignment, destructor
  2. 类成员有const/reference,default copy constructor 会编译出错

六 Explicitly disallow the use of compiler-generated functions you don't want对象

  1. 方法一:直接放到private中,缺点是多是link的时候报错
  2. 方法二:申明一个基类,函数放在private里(不用实现)

七 Declare destructors virtual in polymorphic base calssesci

  1. pure virtual
  2. 能够防止只析构了 base class 部分
  3. 若是不是做为base class 使用或者不是为了具备多态性,请勿申明virtual,会增长体积

八 Prevent exceptions from leaving destructors(wait,cannot understand now)it

九 Never call virtual functions during construction or destructionio

  1. 这样调用的不是派生类的virtual函数

十 Have assignment operators return a reference to *this

  1. 便于写成连锁形式
相关文章
相关标签/搜索