1.缺省情況下, 用一個(gè)類的對象初始化另一個(gè)對象, 或者向該類另一個(gè)對象賦值, 都由缺省的按成員語義(default memberwise semantics)支持
   在某些情況下, 對類的安全性和處理正確性是不夠的, 需要類設(shè)計(jì)者提供特殊的拷貝構(gòu)造函數(shù)(copy constructor)和拷貝賦值操作符(copy assignment

operator)的定義
2.new類對象 --只有new表達(dá)式成功的申請到空間內(nèi)存, 構(gòu)造函數(shù)才會(huì)被調(diào)用
3.構(gòu)造函數(shù)定義為inline時(shí), 創(chuàng)建對象是會(huì)在調(diào)用點(diǎn)展開構(gòu)造函數(shù)
4.成員初始化列表(member initialization list)
5.構(gòu)造函數(shù)不能用const或volatile關(guān)鍵字來聲明
   一個(gè)const類對象在"從其構(gòu)造函數(shù)完成到析構(gòu)函數(shù)開始"這段時(shí)間內(nèi)才被認(rèn)為是const, volatile類對象也一樣
6.explicit修飾符通知編譯器不要提供隱式轉(zhuǎn)換
   void print(const CTest &test);
   //...
   print("oops");  //這種調(diào)用會(huì)把"oops"轉(zhuǎn)換成一個(gè)CTest對象
   缺省情況下, 單參數(shù)構(gòu)造函數(shù)(或者有多個(gè)參數(shù), 除了第一個(gè)參數(shù)外, 其他都有缺省實(shí)參)被用作轉(zhuǎn)換符
   無意的隱式類轉(zhuǎn)換, 是很難跟蹤的錯(cuò)誤!, 關(guān)鍵字explicit被引入到標(biāo)準(zhǔn)c++中, 以幫助我們抑制這種不受歡迎的編譯輔助行為
   explicit只能被應(yīng)用在構(gòu)造函數(shù)上
7.缺省構(gòu)造函數(shù)是不需要用戶指定實(shí)參就能夠被調(diào)用的構(gòu)造函數(shù), --并不意味著它不能接受實(shí)參, 只意味著構(gòu)造函數(shù)的每個(gè)參數(shù)都有一個(gè)缺省值與之關(guān)聯(lián)
8.限制對象創(chuàng)建 --把相關(guān)構(gòu)造函數(shù)放到非公有訪問區(qū)內(nèi), 從而限制或顯示禁止某些形式的對創(chuàng)建動(dòng)作
   在實(shí)際的c++程序中, 非公有的構(gòu)造函數(shù)主要用處是:
    防止用一個(gè)類對象想該類另一個(gè)對象做拷貝
    指出只有當(dāng)一個(gè)類在繼承層次中被用作基類, 而不能直接被應(yīng)用程序操縱時(shí), 構(gòu)造函數(shù)才能被調(diào)用
9.拷貝構(gòu)造函數(shù) --用一個(gè)類對象初始化該類的另一個(gè)對象被稱為缺省按成員初始化(default memberwise initialization)
   一個(gè)類對象想該類的另一個(gè)對象作拷貝是通過依次拷貝每個(gè)非靜態(tài)數(shù)據(jù)成員來實(shí)現(xiàn)
   類設(shè)計(jì)者可以通過提供特殊的拷貝構(gòu)造函數(shù)(copy constructor)來改變?nèi)笔〉男袨?/span>
   拷貝構(gòu)造函數(shù)不一定是const, 但它卻必須是引用
10.無論何時(shí), 當(dāng)在一個(gè)函數(shù)內(nèi)刪除一個(gè)獨(dú)立的堆對象時(shí), 最好使用auto_ptr類對象而不是一個(gè)實(shí)際的指針
   如果delete表達(dá)式失敗, 如一個(gè)異常被拋出, 會(huì)到時(shí)內(nèi)存泄露(異常拋出, 跳過了delete操作?), 不會(huì)調(diào)用析構(gòu)函數(shù)
   所以建議用auto_ptr智能指針
11.對于在堆中分配的類對象數(shù)組的元素, 我們沒有辦法提供一組顯示的值來做初始化, 如果細(xì)化支持通過new表達(dá)式分配數(shù)組, 則類必須提供一個(gè)缺省的構(gòu)

造函數(shù), 或不提供構(gòu)造函數(shù)
12.用一個(gè)類對象初始化另一個(gè)類對象, 稱為按成員初始化(default memberwise initialization)
    發(fā)生在 用一個(gè)類對象顯示的初始化另一個(gè)對象
           把一個(gè)類對象作為實(shí)參傳遞給一個(gè)函數(shù)
           把一個(gè)類對象作為一個(gè)函數(shù)的返回值傳遞回來
           非空順序容器類型的定義
           把一個(gè)類對象插入到一個(gè)容器類型中
13.成員類對象初始化
14.缺省按成員賦值(default memberwise assignment) --用一個(gè)類對象向該類的另一個(gè)對象的賦值操作
    用隱式的拷貝賦值操作符
    一般來所, 如果缺省的按成員初始化對于一個(gè)類不合適, 則缺省的按成員賦值也不合適
    通過提供一個(gè)現(xiàn)實(shí)的拷貝賦值操作符的實(shí)例, 可以改變?nèi)笔〉陌闯蓡T賦值
    注意要防止一個(gè)類對象向自己賦值 --對于"先釋放與該對象當(dāng)前相關(guān)的資源, 以便分配與被拷貝對象相關(guān)資源"這樣的拷貝賦值操作符, 拷貝自身尤其不

合適
    當(dāng)一個(gè)類對象被賦值給該類的另一個(gè)對象是:
        a檢查該類, 判斷是否提供了一個(gè)現(xiàn)實(shí)的拷貝賦值操作符
        b如果是, 檢查訪問權(quán)限, 判斷是否可以被調(diào)用
        c如果不能被調(diào)用, 編譯錯(cuò)誤, 否則執(zhí)行這個(gè)調(diào)用
        d如果該類沒有提供顯示的拷貝賦值操作符, 則執(zhí)行按缺省成員賦值
        e在缺省按成員賦值下, 每個(gè)內(nèi)置類型或復(fù)合類型的數(shù)據(jù)成員被賦值給相應(yīng)的成員
        f對于每個(gè)類成員對象, 遞歸執(zhí)行a到f步, 知道所有內(nèi)置或復(fù)合類型的數(shù)據(jù)成員都被賦值
    如果希望完全禁止按成員拷貝的行文, 將操作符聲明為private并且不提供實(shí)際定義即可
    一般來說, 應(yīng)該將拷貝構(gòu)造函數(shù)和拷貝賦值操作視為一個(gè)個(gè)體單元
15.C++語言不能有效地返回一個(gè)類對象, 這被視為c++語言的一個(gè)重大缺陷
16.c++類對象的初始化總是比賦值更有效