[英]smart pointer memory pool
我正在使用內存池來提高速度優勢的大型舊代碼庫。 但是,問題在於,通過內存池分配和取消分配內存很復雜。 我想嘗試使用智能指針,但是有人建議我,性能下降將是一個問題。
似乎提供的解決方案是一個智能指針實現,該實現將繼續使用內部的原始內存池。 我找不到使用中的任何智能指針/內存池組合。 誰能指出我的示例實現? 嘗試之前,我應該注意哪些陷阱/注意事項?
智能指針通常不會為它們所指向的對象分配內存-而是您自己創建對象,並從生成的原始指針構造所需類型的智能指針。
但是,智能指針將在此之后控制對象的生命周期,因此,根據您選擇的智能指針的規則,它需要知道如何在不再引用該對象時釋放該對象。
默認操作是使用“刪除”,但是您可以提供自己的“自定義刪除器”。
例如:
MyClass* CreateMyObject(/* whatever args you need */) {
// Do whatever it takes to create your object in the pool
return myObject;
}
void DeleteMyObject(MyClass *obj) {
// Do whatever it takes to free object from pool
}
std::shared_ptr<MyClass> ptr(CreateMyObject(....), DeleteMyObject);
我不確定這是否可以解決您最初的擔憂-您仍然需要處理在池中分配和取消分配對象的復雜性-但您確實可以獲得智能指針的生命周期管理優勢。
這是至少一個有關使用自定義刪除器的教程。
Andrei Alexandrescu的現代C ++設計在智能指針方面有一章很好。 本書中描述的Loki庫提供了一些模板,這些模板使用策略類來調整智能指針的行為以適應您的特定需求。
請注意,它們是與C ++ 11的std::shared_ptr
不同的野獸,並且與它們不兼容。 根據您的維護需求,將Loki集成到您的代碼庫中可能不是一個合理的選擇。 但是無論如何,本書中的概念都值得探討。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.