• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Robin Chow's C++ Blog

             

            [導入]編寫異常安全的代碼

            對于異常安全的評定,可分為三個級別:基本保證、強保證和不會失敗。

              基本保證:確保出現異常時程序(對象)處于未知但有效的狀態。所謂有效,即對象的不變式檢查全部通過。
              強保證:確保操作的事務性,要么成功,程序處于目標狀態,要么不發生改變。
              不會失敗:對于大多數函數來說,這是很難保證的。對于C++程序,至少析構函數、釋放函數和swap函數要確保不會失敗,這是編寫異常安全代碼的基礎。

            總結一下編寫異常安全代碼的幾條準則:

              1.只在應該使用異常的地方拋出異常
              2.如果不知道如何處理異常,請不要捕獲(截留)異常。
              3.充分使用RAII(smart ptr),旁路異常。
              4.努力實現強保證,至少實現基本保證。
              5.確保析構函數、釋放類函數和swap不會失敗。

              另外,還有一些語言細節問題:

              1.不要這樣拋出異常:throw new exception;這將導致內存泄漏。
              2.自定義類型,應該捕獲異常的引用類型:catch(exception& e)或catch(const exception& e)。
              3.不要使用異常規范,即使是空異常規范。編譯器并不保證只拋出異常規范允許的異常,更多內容請參考相關書籍。


            文章來源:http://my.donews.com/robinchow/2007/01/11/vdcfhpltuhbzmtzupiknflljcnxqpkyloaqv/

            posted @ 2007-10-23 20:51 Robin Chow 閱讀(125) | 評論 (0)編輯 收藏

            [導入]Exception C++ 之 19

            關于控制流(即 C++ 代碼的執行順序):
            1. 在各翻譯單元之間的那些全局變量(包括類的靜態變量)的初始化順序并未被定義。
            2. 當程序在 non-debug 模式下被建立的時候,編譯器會自動刪掉 assert()。因此不要在 assert 中加入有副作用的代碼。
            3. 對于代碼:cout << f(i) << g(i);,f 和 g 的執行順序是不確定的,即隨著不同的編譯器實現而有所不同。


            文章來源:http://my.donews.com/robinchow/2007/01/15/ragovhbegchcbordvelfjrvrdzairpzjpfxl/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(69) | 評論 (0)編輯 收藏

            [導入]Exception C++ 之 18

            C++ 中 bool 是一個基本類型,可以通過各種方法來模擬它,但是都存在不同的缺陷:
            1. 使用 typedef 模擬,bool 不允許重載。
            2. 使用 #define,bool 不允許重載且通常破壞了 #define。
            3. enum bool允許重載但在條件表達式中不能進行自動類型轉換。bool b = (i == j)是錯誤的,因為 int 不能隱含地轉換成 enums。
            4. bool 類允許重載但不能讓 bool 對象在條件中作測試,除非它能提供自動轉換到基本類型,但是提供自動轉換卻通常會干擾函數重載解析過程。

            文章來源:http://my.donews.com/robinchow/2007/01/15/bszvusphgepqbphvticopjkpfadfapccibyd/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(81) | 評論 (0)編輯 收藏

            [導入]Hohoho

            http://www.ianai.net/jokes/WillNotThrow.gif
            文章來源:http://my.donews.com/robinchow/2007/01/15/cglotemjvscvgbjpnasvjzxcgxvqqugtbsiv/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(88) | 評論 (0)編輯 收藏

            [導入]不使用第三個數來交換兩個數的值的方法(英文)



            Interchanging 2 variables without the use of a third - Programming/PHP
            文章來源:http://my.donews.com/robinchow/2007/01/15/nbctysjyzmipdsnjkfhkwjgoqubiylxlmael/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(89) | 評論 (0)編輯 收藏

            [導入]C++ 代碼優化(英文)

            值得一看:

            C++ Code Optimizations
            文章來源:http://my.donews.com/robinchow/2007/01/15/bimskiqoaxkxvxlvzbfgoxtnrlgtocbpkohu/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(80) | 評論 (0)編輯 收藏

            [導入]Exception C++ 之 17

            1. 建議總是使用“SomeType t(u)”的形式,一來是因為只要可以用“SomeType t = u”的地方也同樣可以用它;二來是因為它還有一些其它的有點,比如支持多個參數等。
            2. 關于 const:
              • 如果函數的返回類型不是一個內建(built-in)的類型的話,通常應該將其返回類型也聲明為 const。這樣可以避免該函數的調用者企圖修改臨時對象。
              • 對于傳引用作為實參,可以將其聲明為 const 以防止對其進行修改;如果使用傳值,則沒有必要聲明為 const。
              • 如果一個函數從邏輯上來說是 const 的,則應該將其聲明為 const 函數,即使該函數實際修改了對象的狀態,這時候必須將要修改的值聲明為 mutable。
            3. 關于類型轉換:
              • dynamic_cast:對公有繼承的基類和派生類進行轉換,轉換失敗時返回 NULL。
              • reinterpret_cast:對于互不相同、區別開來的類型(例如函數指針),盡管它們之間存在著隱式轉換,它們也是互無聯系的,應該用 reinterpret_cast 進行轉換。




            文章來源:http://my.donews.com/robinchow/2007/01/15/HxCWeJTzfsIHxGSohwbqozDYDPwcLcYtAApF/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(75) | 評論 (0)編輯 收藏

            [導入]Exception C++ 之 16

            • 如果需要的話,請編寫一個私有函數來使拷貝操作和拷貝賦值共享代碼;千萬不要利用“使用顯式的析構函數并且后面跟一個 placement new”的方法來達到“以拷貝構造操作實現拷貝賦值操作”這樣的目的。也就是說,決不要編寫如下的代碼:
              T& T::operator=(const T &other)
              {
                  if(this != &other)
                  {
                     this->~T();               // 有害!
                     new (this) T(other);   // 有害!
                  }
                  return *this;
              }
            • 關于拷貝賦值操作符有兩點需要注意:
              1. 將拷貝賦值操作聲明為“T& T::operator=(const T&)”
              2. 不要返回 const T&,盡管這樣做避免了諸如“(a = b) = c”的用法;這樣做意味著:你無法出于移植性的考慮而將 T 對象放入標準程序庫之容器 -- 因為其需要賦值操作返回一個單純的 T&。

            文章來源:http://my.donews.com/robinchow/2007/01/14/uufhhtovwfvygicxibjufbugcnhamivhcapk/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(59) | 評論 (0)編輯 收藏

            [導入]Exception C++ 之 15

            使用 auto_ptr(靈巧指針)的注意事項:
            1. 對于 auto_ptr,拷貝不是對等的。右側的對象不再擁有對象的所有權。
            2. 不再擁有所有權的 auto_ptr 的指針會被置為 NULL,因而對它的解引用會導致錯誤。
            3. 使用 const auto_ptr 可以防止將該靈巧指針賦值給其他靈巧指針。

            文章來源:http://my.donews.com/robinchow/2007/01/14/xzuxgvbkpleammqcmlzlsjhkcqmgfdpddjaj/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(70) | 評論 (0)編輯 收藏

            [導入]Exception C++ 之 14

            關于內存管理:
            1. new 和 delete 必須配套提供,即提供了 new 就必須提供相應的 delete,反之亦然。
            2. 如果基類的析構函數聲明為 virtual,則對基類指針調用 delete 時總是調用派生類的析構函數,因而也總是調用派生類的 delete。
            3. 絕對不要以多態方式處理數組(見《More Effective C++》條款3)。
            4. new 和 delete 總是靜態的,即使它們不被顯式的聲明為 static。總是把它們聲明為 static 是個很好的習慣,這可以讓所有閱讀代碼的程序員明白無誤的認識到這一點。

            文章來源:http://my.donews.com/robinchow/2007/01/14/cnfqokuxltsdoepsgwhcvonezmrrzircwxsk/

            posted @ 2007-10-23 20:49 Robin Chow 閱讀(82) | 評論 (0)編輯 收藏

            僅列出標題
            共9頁: 1 2 3 4 5 6 7 8 9 

            導航

            統計

            常用鏈接

            留言簿(1)

            隨筆分類

            隨筆檔案

            搜索

            最新評論

            閱讀排行榜

            評論排行榜

            四虎国产精品免费久久久| 亚洲狠狠婷婷综合久久蜜芽| 久久99国产精品一区二区| 亚洲欧美日韩精品久久| 久久婷婷午色综合夜啪| 无码精品久久久天天影视| AAA级久久久精品无码片| 无夜精品久久久久久| 精品久久久久久国产潘金莲 | 99久久99久久精品国产片| 久久青青草原亚洲av无码| 狼狼综合久久久久综合网| 久久国产视频网| 精品久久久久久综合日本| 国产精品久久久久免费a∨| 婷婷综合久久中文字幕| 99久久精品国产一区二区| 国内精品伊人久久久久网站| 久久久无码精品亚洲日韩蜜臀浪潮 | 欧美国产成人久久精品| 国产精品美女久久久久| 久久精品国产免费观看三人同眠| 国内精品久久久久影院网站| 秋霞久久国产精品电影院| 久久久久久久久无码精品亚洲日韩| 伊人久久亚洲综合影院| 久久国产影院| 午夜精品久久久久久| 久久人人爽人人精品视频| 国产A级毛片久久久精品毛片| 97精品伊人久久大香线蕉app| 亚洲va久久久噜噜噜久久狠狠 | 蜜臀久久99精品久久久久久小说| 久久夜色精品国产| 久久综合五月丁香久久激情| 久久青青国产| 精品国产99久久久久久麻豆| 久久久精品国产免大香伊| 影音先锋女人AV鲁色资源网久久| 精品国产乱码久久久久久人妻 | 亚洲精品乱码久久久久久久久久久久 |