1.上下文(context)
2. 全局域內(nèi)的函數(shù)聲明將引入全局函數(shù)(global function)
3.全局域內(nèi)的變量將引入全局對象(global object)
4.生命期(lifetime)
5.函數(shù)聲明(declaration) 指定了該函數(shù)的名字以及函數(shù)的返回類型和參數(shù)列表
6.函數(shù)定義(definition)還為函數(shù)提供了函數(shù)體
7.extern為聲明但不定義一個對象提供了一種方法. --承諾了該對象會在其他地方被定義
    extern 聲明不會引起內(nèi)存被分配
8.c++中有一種機(jī)制, 通過它可以把函數(shù)參數(shù)的類型和數(shù)目編碼在函數(shù)名中, 改機(jī)制叫做類型安全鏈接(type-safe-linkage)
9.不同文件中出現(xiàn)同一對象或函數(shù)聲明的其他類型不匹配情況, 在編譯或鏈接時可能不會被捕捉到, 因?yàn)榫幾g器一次只能處理一個文件, 他不能很容易地檢

查到文件之間的類型違例, 這些類型違例可能是程序嚴(yán)重錯誤的根源
10.頭文件為所向extern對象聲明, 函數(shù)聲明以及inline函數(shù)定義提供了一個集中的位置: 這被稱作聲明的局部化(localization)
11.頭文件提供了兩個安全保證
    保證所有文件都包含同一個全局對象或函數(shù)的同一份聲明
    如果需要修改聲明, 則只需要改變一個頭文件
    --只在本cpp用的全局函數(shù), 該不該定義在頭文件里面?
12.局部對象(local object)
   自動對象(automatic object)  --程序運(yùn)行棧
   寄存器對象(register object) --如果所選擇的變量被頻繁使用, 則寄存器變量可以提高函數(shù)的執(zhí)行速度
   局部靜態(tài)對象(local static object)
13.當(dāng)一個自動變量的地址唄存儲在一個生命期長與它的指針時, 該指針被稱為空懸指針(dangling pointer)
14.動態(tài)分配的對象被分配在程序的空閑存儲區(qū)(free store)的可用內(nèi)存池中
15.new表達(dá)式失敗時, 通常會拋出bad_alloc異常
16.應(yīng)用delete表達(dá)式失敗, 使內(nèi)存無法返回空閑存儲區(qū), 稱作內(nèi)存泄露(memory leak)
17.對用一內(nèi)存應(yīng)用了兩次delete表達(dá)式, 通常發(fā)生在兩個指針指向同一個動態(tài)分配對象的時候, 這是一個很難跟蹤的問題
18.在對象被釋放后讀寫該對象, 這常常會發(fā)生, 因?yàn)閐elete表達(dá)式應(yīng)用的指針沒有被設(shè)置為0
19.為幫助程序員更好地管理動態(tài)分配的內(nèi)存, c++庫提供了auto_ptr類類型的支持 --智能指針
20.auto_ptr類模板頭文件<memory>
    auto_ptr<int>pi(new int(1024));
    //pi是局部智能指針, 當(dāng)pi生命期結(jié)束時候, 會自動釋放pi指向的堆空間
    為了判斷auto_ptr對象是否指向了一個對象, 可以用操作get()返回auto_ptr對象內(nèi)部的底層指針
    if(p_auto_int.get() != 0 && *p_auto_int != 1024) { ... }
21.在某些情況下, 小細(xì)節(jié)會積聚成可怕的性能瓶頸, 這些細(xì)節(jié)不應(yīng)該煩擾那些試圖為整個程序提供解決方案的人, 但是這些細(xì)節(jié)是有經(jīng)驗(yàn)的程序員應(yīng)該考慮

22.定位new表達(dá)式
    new表達(dá)式可以允許程序員要求將對象創(chuàng)建在已經(jīng)被分配好的內(nèi)存中, 這種形式的new表達(dá)式被稱為定位new表達(dá)式(placement new expression)
    new (place_address) type -specifier
    place_address必須是個指針
    頭文件<new>
    byte *mem = new byte[4096]; //這個是自定義內(nèi)存池?
    char *tmp = new(mem) char; //在內(nèi)存池分配一個char來用?
    delete [] mem;