2011-11-17 85 views
2

使用RapidXML我需要創建和銷燬很多XML節點和XML屬性。我在內存池文檔中讀到,沒有辦法使用allocate_string函數釋放在內存池中創建的單個字符串。RapidXml和內存池

但是這樣內存池的大小會增加,在我看來,一個問題不會成功刪除鏈接到不再使用的屬性或節點的字符串。

我的擔心是用一個太動態的系統來填充內存池空間,在這個系統中,我創建並銷燬了大量沒有「先驗」已知模式的節點。

有沒有辦法可以跳過這個問題?

補充:

閱讀文檔,我發現memory_pool :: set_allocator功能,在乍看之下,似乎解決我的問題。我試圖使用這個功能,但我沒有成功。有沒有人使用過set_allocator函數?我在互聯網上沒有找到任何示例或參考資料。

回答

2

rapidxml中的內存池不支持釋放(除釋放整個池之外)。這是因爲它們被設計爲在解析期間提供最大的分配性能,並且在這種情況下不需要解除分配節點。

如果您需要手動分配和取消分配節點,則無法阻止您使用new/delete從堆中分配節點。

set_allocator函數在這裏沒用。它允許您替換整個池的分配機制,而不是單個節點。