您好,登錄后才能下訂單哦!
本篇內容介紹了“C++11中allocator::construct怎么構造”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
一般來說,C++中根據需要逐個構建對象的情況比較多。例如我們有下面的Tracer(曳光彈)類:
這個類只是在構造函數,析構函數中輸出了表示構造函數和析構函數被執行的字符串。之所以叫曳光彈,是希望通過它確認對象構建和銷毀的過程,其作用就像曳光彈一樣。
構建,銷毀對象的代碼如下:
以下是輸出結果,和我們預想的結果一樣,構造函數,析構函數各被調用一次。
如果希望同時創建、銷毀多個對象,可以使用如下代碼:
以下輸出結果,依然很完美。
上述兩種情況中,new(new[])在分配內存之后會調用構造函數;相對地,delete(delete[])在調用析構函數之后還會釋放內存。
placement new
如果需要多個對象,但是事先不知道具體需要多少個,或者不能確定應該如何初始化,事情就比較難辦:重復使用new來構建對象當然可以滿足上述要求,但是多次從堆中申請內存會影響效率。所以就希望找到一種辦法,能夠將內存的分配/釋放和對象的構造/析構動作分離,從而實現一次分配內存,自由構建對象的目的。
早期的C++中,可以使用placement new來解決這個問題,實例代碼如下:
輸出如下:
構造函數,析構函數都按照我們期待的那樣被調用,但是有點小問題:一個是語法比較特殊,另外就是內存管理比較麻煩。
allocator
稍微晚一點的C++在標準庫中,增加了allocator模板類,使得同樣的事情變得更加簡單:
輸出結果完全相同:
和placement new比較起來,allocator使用了相同的邏輯結構的同時,很好地解決了placement new存在的問題。
“C++11中allocator::construct怎么構造”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。