創建自定義內存分配器像以下:C/C++自定義分配器存儲器泄漏
class pool_allocator
{
// required methods
// ...
private:
boost::shared_ptr<MemoryChunks> m_t;
};
這個分配器的目的是共享存儲器由不同的容器中分配,僅解除分配它們當所有容器和刪除。因此,我使用boost::shared_ptr
。
但是,在VS2008中運行它之後,我檢測到內存泄漏。我不知道爲什麼。
如果我將boost::shared_ptr
更改爲MemoryChunks
,則內存泄漏消失。
MemoryChunks就像一個Chunk數組,每個塊包含一個對象數組,並且ptr指向下一個空閒對象。由於除非塊被刪除,否則永遠不會釋放對象。分配/空閒意味着O(1)。當內存塊被刪除時,它將釋放所有的塊。 –
你最好發佈'MemoryChunk'的定義,並且如果可能的話分配器本身的實現。你正確處理反彈嗎?如果我向一個容器提供一個默認的構造分配器,它是否正常工作?等等...... –
@ K-ballo謝謝。分配器是另一個庫的一部分:[pool_allocator_stl](http://drdobbs.com/cpp/184406243)。我添加了一個新的保留策略,它使用boost :: shared_ptr來保存它們。如果我使用其默認保留策略,則在堆棧上檢測不到內存泄漏。 –