Beyond the C++ Standard Library: An Introduction to Boost — Library 1.3 scoped_array

來源:互聯網
上載者:User
scoped_array

標頭檔: "boost/scoped_array.hpp"

需要動態分配數組時,通常最好用std::vector來實現,但是有兩種情形,看起來用數組更應該: 一種是為了最佳化,用vector多少有一些額外的記憶體和速度開銷;另一種是為了某種原因,必須要求數組的大小是固定的。[5] 動態分配的數組會遇到與普通指標一樣的危險,並且還多了一個(也是最常見的一個),錯誤調用delete操作符而不是delete[]操作符。我曾經在你想象不到的地方見到過這個錯誤,那也是它常被用到的地方,在你自己實現的容器類裡!scoped_array 為數組做了scoped_ptr為單個對象的指標所做的事情:它負責釋放記憶體。區別只在於scoped_array 是用delete[] 操作符來做這件事的。

[5] 沒有非常清晰的優點。實際上,最好還是用 std::vector ,除非效能測試表示scoped_array 的好處是可保證的。

scoped_array是一個單獨的類而不是scoped_ptr的一個特化的原因是,因為不可能用元編程技術來區分指向單個對象的指標和指向數組的指標。不管如何努力,也沒有人能發現一種可靠的方法,因為數組太容易退化為指標了,這使得沒有類型資訊可以表示它們是指向數組的。結果,只能由你來負責用scoped_array來代替scoped_ptr,就如你必須用delete[]操作符來代替delete操作符一樣。這樣的好處是scoped_array 負責為你處理刪除的事情,而你則告訴scoped_array 我們要處理的是數組,而不是裸指標。

scoped_array與scoped_ptr非常相似,不同的是它提供了operator[] 來模仿一個裸數組。

scoped_array 是比普通的動態分配數組更好用。它處理了動態分配數組的生存期管理問題,就如scoped_ptr管理對象指標的生存期一樣。但是記住,多數情況下應該使用std::vector,它更靈活、更強大。只有當你需要確保數組的大小是固定的時候,才使用scoped_array 來替代 std::vector.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.