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. 便於寫成連鎖形式
相關文章
相關標籤/搜索