天天看點

《C++面向對象高效程式設計(第2版)》——3.17 編寫記憶體安全類

本節書摘來自異步社群出版社《c++面向對象高效程式設計(第2版)》一書中的第3章,第3.17節,作者: 【美】kayshav dattatri,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

c++面向對象高效程式設計(第2版)

良好實作的類應該負責管理正确配置設定記憶體,無論建立(無論以何種方式建立)和使用了多少對象,都不會引發任何記憶體(資源)洩漏。設計和實作這樣的類并不容易,要了解記憶體安全類的指導原則,必須先了解無用單元回收(garbage collection)、懸挂引用(dangling reference)和初始化問題。第4章将涵蓋這些内容。現在,先來了解一下記憶體安全類。

通過以上對值、指針和引用的讨論,你可能會擔心性能問題。如果需要改善類(或一組類)的性能,以下列出的一些指導原則會有所幫助。必須反複強調一點,在編寫類的第1個版本的代碼時,首要的目标是正确地實作類,不要把注意力集中在性能上。等其他部分都完成妥當後,實際性能測試的結果會指導我們如何改善性能。

記住:

(1)避免制作對象的副本。複制對象的開銷很大(在記憶體和cpu時間方面)。

  避免建立新對象,設法複用現有對象。建立(和銷毀)對象開銷很大。

  在适當的時候使用const引用形參。

  使用const成員函數。

  盡可能地使用初始化語義(而非指派)。

  優先使用指針而不是引用作為資料成員。指針允許惰性求值(lazy evaluation),而引用不允許。在第4章和第二部分的第11章中将做詳細介紹。

  避免在預設構造函數中配置設定存儲區。要将配置設定延遲到通路成員時,通過指針資料成員(pointer data member)可輕松完成(見第11章)。

  用指針資料成員而不是引用和值成員。

  盡可能地使用引用計數(在其他章節深入讨論)。

  通過重新安排表達式和複用對象減少臨時對象。

(2)在編寫代碼的最初階段中避免使用技巧。

  堅持安全第一,確定不會出現記憶體洩漏。

  在軟體開發的早期階段,不用擔心優化的問題。基于性能評定,再關注這個問題。

  在現實世界中,通常認為任何軟體都是以速度作為最終評定的标準。許多時候,客戶并不關心我們是使用oo技術還是其他什麼技術。請不要誤認為我是個因循守舊、不切實際的理論派擁護者。實際上,任何軟體在快速運作之前,都必須保證該軟體足夠穩定和可靠。我們可以通過對實作的改善和性能工具提供的幫助,來提高軟體的性能。在尚未完成類的實作時,無需過分擔心性能問題。

本文僅用于學習和交流目的,不代表異步社群觀點。非商業轉載請注明作譯者、出處,并保留本文的原始連結。

繼續閱讀