《C++面向对象高效编程(第2版)》——3.17 编写内存安全类
本節書摘來自異步社區出版社《C++面向對象高效編程(第2版)》一書中的第3章,第3.17節,作者: 【美】Kayshav Dattatri,更多章節內容可以訪問云棲社區“異步社區”公眾號查看。
3.17 編寫內存安全類
C++面向對象高效編程(第2版)
良好實現的類應該負責管理正確分配內存,無論創建(無論以何種方式創建)和使用了多少對象,都不會引發任何內存(資源)泄漏。設計和實現這樣的類并不容易,要理解內存安全類的指導原則,必須先理解無用單元回收(garbage collection)、懸掛引用(dangling reference)和初始化問題。第4章將涵蓋這些內容。現在,先來了解一下內存安全類。
3.17.1 改善性能
通過以上對值、指針和引用的討論,你可能會擔心性能問題。如果需要改善類(或一組類)的性能,以下列出的一些指導原則會有所幫助。必須反復強調一點,在編寫類的第1個版本的代碼時,首要的目標是正確地實現類,不要把注意力集中在性能上。等其他部分都完成妥當后,實際性能測試的結果會指導我們如何改善性能。
記住:
(1)避免制作對象的副本。復制對象的開銷很大(在內存和CPU時間方面)。
避免創建新對象,設法復用現有對象。創建(和銷毀)對象開銷很大。
在適當的時候使用const引用形參。
使用const成員函數。
盡可能地使用初始化語義(而非賦值)。
優先使用指針而不是引用作為數據成員。指針允許惰性求值(lazy evaluation),而引用不允許。在第4章和第二部分的第11章中將做詳細介紹。
避免在默認構造函數中分配存儲區。要將分配延遲到訪問成員時,通過指針數據成員(pointer data member)可輕松完成(見第11章)。
用指針數據成員而不是引用和值成員。
盡可能地使用引用計數(在其他章節深入討論)。
通過重新安排表達式和復用對象減少臨時對象。
(2)在編寫代碼的最初階段中避免使用技巧。
堅持安全第一,確保不會出現內存泄漏。
在軟件開發的早期階段,不用擔心優化的問題。基于性能評定,再關注這個問題。
在現實世界中,通常認為任何軟件都是以速度作為最終評定的標準。許多時候,客戶并不關心我們是使用OO技術還是其他什么技術。請不要誤認為我是個因循守舊、不切實際的理論派擁護者。實際上,任何軟件在快速運行之前,都必須保證該軟件足夠穩定和可靠。我們可以通過對實現的改善和性能工具提供的幫助,來提高軟件的性能。在尚未完成類的實現時,無需過分擔心性能問題。
本文僅用于學習和交流目的,不代表異步社區觀點。非商業轉載請注明作譯者、出處,并保留本文的原始鏈接。
總結
以上是生活随笔為你收集整理的《C++面向对象高效编程(第2版)》——3.17 编写内存安全类的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 《思科UCS服务器统一计算》一导读
- 下一篇: 《树莓派开发实战(第2版)》——1.7