簡體   English   中英

智能指針存儲池

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM