原创 c/c++對數組取地址

沒怎麼用過c/c++,今天偶然碰到一個問題,記錄一下。 int a[3] = {1, 2, 3}; cout << a << endl;cout << &a <<endl; 輸出的結果一樣嗎? 答案是一樣,不一樣我也不用寫了。初看起

原创 [讀書筆記] 關於Windows的結構化異常處理SEH(二)

上篇說的是終止處理程序,這篇接着看異常處理。 也就是: <pre name="code" class="cpp">__try { // 被保護的代碼 } __except(exception filter/*異常過濾程序*/) {

原创 [delphi] windows消息

windows消息的結構   TMsg = packed record     hwnd: HWND;//窗口句柄     message: UINT;//消息標識     wParam: WPARAM;//     lParam: LP

原创 讀書筆記《Effective c++》 條款15 在資源管理類中提供對原始資源的訪問

結論: a.APIs往往要求訪問原始資源,所以每一個RAIIclass應該提供一個取得其所管理的資源的辦法,例如智能指針的get()方法。 b.對原始資源的訪問可能經由顯示轉換或隱式轉換。一般而言顯式轉換比較安全,但隱式轉換對客戶比較方

原创 讀書筆記《Effective c++》 條款23 寧以non-member,non-friend替換member函數

本節的介紹感覺更像是內容與接口的設計實現,書中以瀏覽器爲例,瀏覽器class提供一系列的功能,並封裝一系列的數據,如果要增加其他內容可以在相同的名字空間內獨立出不同的頭文件,就像stl中的做法,例如,可以有下載頭文件、工具頭文件、影響頭

原创 讀書筆記《Effective c++》 條款24 若所有參數皆需要類型轉換,請爲此採用non-member函數

這節的例子很簡單,就是類外定義操作符重載,一個二元操作符,對於本身出現在操作符的右邊的表達式,是需要定義一個兩個參數的non-member重載的,這個和是否是需要類型轉換並沒有絕對的關係,我還是沒有get到本小節的點。 結論:   如

原创 讀書筆記《Effective c++》 條款18 讓接口容易被正確使用,不易被誤用

a.提供給客戶的接口,最好能在編譯器就檢查出錯誤。例如給參數限定有限制的類型。 b.自定義類型的接口儘量與內置類型兼容,降低客戶理解成本和出錯風險。 c.接口如果要求客戶記住某件事,那麼這個接口就有着“不正確使用”的傾向,因爲客戶很

原创 讀書筆記《Effective c++》 條款22 將成員變量聲明爲private

本節主要是可見性和封裝的問題。 結論:   a.切記將成員變量聲明爲private。這可賦予客戶訪問數據的一致性、可細微劃分訪問控制、允諾約束條件獲得保證,並提供class作者以充分的實現彈性。   b.protected並不比pu

原创 讀書筆記《Effective c++》 條款17 以獨立語句將newed對象置入智能指針

假設有一個函數: int priority(); void processWidget(std::share_ptr<Widget> pw, int priority1); 調用的時候可能會這麼寫: processWidget(s

原创 讀書筆記《Effective c++》 條款09 絕不在構造和析構函數中調用virtual函數

這點確實要注意,這個和delphi中是不一樣的,不過也可以理解成delphi的create函數並不等同於c++的構造函數。 using std::cout; using std::endl; using std::string; c

原创 讀書筆記《Effective c++》 條款21 必須返回對象時,別妄想返回其reference

本節舉例說明了函數返回一個對象的引用有很多坑,尤其是對這種operator*類的函數,因爲客戶可能會這麼寫:a*b*c,這樣,即使在堆上分配對象,也會陷入用戶無法對其調用delete的深坑,所以其實最簡單的做法就是直接by value返

原创 讀書筆記《Effective c++》 條款06 若不想使用編譯器自動生成的函數,就應該明確拒絕

如果不希望編譯器自動生成一些函數,例如樹葉類不喜歡有賦值構造函數,因爲“世界上沒有完全相同的兩片葉子”,有兩個方法: a.本書中介紹的,將其聲明爲private而且不提供函數實現。   只聲明成private還是不夠,因爲其他成員函

原创 讀書筆記《Effective c++》 條款20 寧以pass-by-reference-toconst替換pass-by-value

默認情況下,c++以by value方式傳遞對象(函數參數、返回值),這些副本是由對象的copy構造函數產出。 傳值有兩個問題: a.效率低下。 b.可能產生對象切割(slicing)問題 class Base { public:

原创 讀書筆記《Effective c++》 條款13 以對象管理資源

所謂資源就是,一旦用了它,將來必須還給系統。 本書出版較早,所以書中介紹的是auto_ptr和tr1::shared_ptr,而在現在c++11中完善了原來的auto_ptr,增加了幾種智能指針,這方面資料很多,這裏只引用別人的一篇文章

原创 讀書筆記《Effective c++》 條款08 別讓異常逃離析構函數

析構函數拋出異常會導致後面的清理資源語句得不到機會執行,會導致資源泄漏。 結論: a.析構函數絕對不要吐出異常。如果一個被析構函數調用的函數可能拋出異常,析構函數應該捕捉任何異常,然後吞下(不傳播)他們或者結束程序。 b.如果客戶需要對