Effective C++ 讀書筆記之Part4.Design and Declarations

來源:互聯網
上載者:User
18. Make interfaces easy to use correctly and hard to use incorrrectly.總結:第一,好的介面很容易被正確使用,不容易被誤用。你應該在你的所有介面中努力達成這些性質。第二,“促使正確使用”的辦法包括介面的一致性,以及與內建類型的行為相容。第三,“阻止誤用”的辦法包括建立新類型、限制類型上的操作,束縛對象值,以及消除客戶的資源管理責任。第四,tr1::shared_ptr支援定製型刪除器(custom deleter)。這可防範DLL問題,可被用來自動解除互斥鎖等等。19.Treat class design as type design.1)新type的對象應該如何被建立和銷毀?2)對象的初始化和對象的賦值有什麼樣的差別?3)新type的對象如果被passed by value(以值傳遞),意味著什嗎?4)什麼是新type的“合法值”?5)你的新type需要配合某個繼承圖系(inheritance graph)嗎?6)你的新type需要什麼樣的轉換?7)什麼樣的操作符和函數對此新type而言是合理的?8)什麼樣的標準函數應該駁回?9)誰該取用新type的成員?10)什麼是新type的“未聲明介面”(undeclared interface)?11)你的新type有多麼一般化?12)你真的需要一個新type嗎?總結:Class的設計就是type的設計。在定義一個新type之前,請確定你已經考慮過本條款覆蓋的所有討論主題。20.Prefer pass-by-reference-to-const to pass-by-value.總結:第一,盡量以pass-by-reference-to-const替換pass-by-value。前者通常比較高效,並可避免切割問題(slicing problem)。第二,以上規則並不適用於內建類型,以及STL的迭代器和函數對象。對它們而言,pass-by-value往往比較適當。21.Don't try to return a reference when you must return an object.總結:絕不要返回pointer或reference指向一個local stack對象,或返回reference指向一個heap-allocated對象,或返回pointer或reference指向一個local static對象而有可能同時需要多個這樣的對象。條款4已經為“在單線程環境中合理返回reference指向一個local static對象”提供了一份設計執行個體。22.Declare data members private.總結:第一,切記將成員變數聲明為private。這可賦予客戶訪問資料的一致性、可細微劃分存取控制、允諾約束條件獲得保證,並提供class作者以充分的實現彈性。第二,protected並不比public更具封裝性。23.Prefer non-member non-friend functions to member functions.總結:寧可拿non-member non-friend函數替換member函數。這樣做可以增加封裝性、包裹彈性(packaging flexibility)和技能擴充性。24.Declare non-member functions when type conversions should apply to all parameters.總結:如果你需要為某個函數的所有參數(包括被this指標所指的那個隱喻參數)進行類型轉換,那麼這個函數必須是個non-member.25.Consider support for a non-throwing swap.總結:第一,當std::swap對你的類型效率不高時,提供一個swap成員函數,並確定這個函數不拋出異常。第二,如果你提供一個member swap,也該提供一個non-member swap用來調用前者。對於classes(而非templates),也請特化std::swap。第三,調用swap時應針對std::swap使用using聲明式,然後調用swap並且不帶任何“命名空間資格修飾”。第四,為“使用者定義型別”進行std templates全特化是最好的,但是千萬不要嘗試在std內加入某些對std而言全新的東西。感悟:這部分主要是介紹設計的時候需要注意的一些原則,總體來說都是在設計類的時候很容易遇見的問題。只是最後一個條款,關於swap的內容,平時用的很少。需要在用到的時候,重新再仔細看下這部分的內容。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.