91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++11中allocator::construct怎么構造

發布時間:2021-11-26 14:17:40 來源:億速云 閱讀:150 作者:iii 欄目:大數據

本篇內容介紹了“C++11中allocator::construct怎么構造”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一般來說,C++中根據需要逐個構建對象的情況比較多。例如我們有下面的Tracer(曳光彈)類:

C++11中allocator::construct怎么構造

這個類只是在構造函數,析構函數中輸出了表示構造函數和析構函數被執行的字符串。之所以叫曳光彈,是希望通過它確認對象構建和銷毀的過程,其作用就像曳光彈一樣。

構建,銷毀對象的代碼如下:

C++11中allocator::construct怎么構造

以下是輸出結果,和我們預想的結果一樣,構造函數,析構函數各被調用一次。

C++11中allocator::construct怎么構造

如果希望同時創建、銷毀多個對象,可以使用如下代碼:

C++11中allocator::construct怎么構造

以下輸出結果,依然很完美。

C++11中allocator::construct怎么構造

上述兩種情況中,new(new[])在分配內存之后會調用構造函數;相對地,delete(delete[])在調用析構函數之后還會釋放內存。

placement new

如果需要多個對象,但是事先不知道具體需要多少個,或者不能確定應該如何初始化,事情就比較難辦:重復使用new來構建對象當然可以滿足上述要求,但是多次從堆中申請內存會影響效率。所以就希望找到一種辦法,能夠將內存的分配/釋放和對象的構造/析構動作分離,從而實現一次分配內存,自由構建對象的目的。

早期的C++中,可以使用placement new來解決這個問題,實例代碼如下:

C++11中allocator::construct怎么構造

輸出如下:

C++11中allocator::construct怎么構造

構造函數,析構函數都按照我們期待的那樣被調用,但是有點小問題:一個是語法比較特殊,另外就是內存管理比較麻煩。

allocator

稍微晚一點的C++在標準庫中,增加了allocator模板類,使得同樣的事情變得更加簡單:

C++11中allocator::construct怎么構造

輸出結果完全相同:

C++11中allocator::construct怎么構造

和placement new比較起來,allocator使用了相同的邏輯結構的同時,很好地解決了placement new存在的問題。

“C++11中allocator::construct怎么構造”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

临夏县| 乾安县| 穆棱市| 吉安县| 高密市| 祁门县| 三台县| 乳源| 彰化县| 叶城县| 海兴县| 康保县| 沿河| 临城县| 贵南县| 来宾市| 安溪县| 昌邑市| 平乡县| 綦江县| 鄂伦春自治旗| 忻城县| 江华| 张家港市| 景泰县| 诸暨市| 黎川县| 合川市| 华宁县| 伊宁市| 花莲县| 澄城县| 景东| 中西区| 墨竹工卡县| 百色市| 衡南县| 陆良县| 临武县| 枣阳市| 微山县|