我正在爲STL編寫基於堆棧的分配器。這個想法是一次分配一大塊內存,讓它在構建對象時建立起來,然後在需要時將其重置爲零。例如,這可用於存儲遊戲級別信息或用於爲遊戲循環的單次迭代創建的對象。當你加載一個級別時,你建立了堆棧,當你需要加載一個新的級別時,你只需將頂部指針重置到開始位置,不需要OS調用。刪除分配給自定義新運算符的對象
現在我的問題是標準分配器的做法,即deallocate()
函數。在this文章中,我可以讀取
在缺省分配,存儲塊被釋放使用 ::運算符刪除。
這意味着通過使用deallocate()
函數,內存被釋放並且析構函數被調用。現在對於我的分配器的purpouse,我可以使deallocate()
函數爲空,因爲我不會爲單個對象釋放內存。
所以,問題是,STL容器如何使用分配器類來創建新對象?由於默認分配器使用new
和delete
,容器有沒有呼叫construct()
或destroy()
?我應該讓我的deallocate()
函數也調用descrutor?
我想同樣的問題是allocate()
和construct()
方法。