gpt4 book ai didi

c++ - 智能指针内存池

转载 作者:行者123 更新时间:2023-11-28 00:18:47 25 4
gpt4 key购买 nike

我正在开发一个大型的旧代码库,该代码库使用内存池来提高速度。但是,问题是通过内存池分配和释放内存很复杂。我想尝试使用智能指针,但有人向我建议性能损失将是一个问题。

似乎出现的解决方案是一个智能指针实现,它继续使用引擎盖下的原始内存池。我找不到任何正在使用的智能指针/内存池组合。任何人都可以指出我的示例实现吗?在尝试之前,我应该注意哪些陷阱/注意事项?

最佳答案

智能指针通常不会为它们指向的对象分配内存 - 而是您自己创建对象并从生成的原始指针构建所需类型的智能指针。

但是智能指针控制着此后对象的生命周期,因此它需要根据您选择的智能指针的规则,知道如何在对象不再被引用时释放该对象。

默认操作是使用“删除”,但您可以提供自己的“自定义删除器”。

例如:

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);

我不确定这是否解决了您最初的担忧 - 您仍然需要处理在池中分配和取消分配对象的复杂性 - 但您确实获得了智能指针的生命周期管理优势。

Here至少是一个关于使用自定义删除器的教程。

关于c++ - 智能指针内存池,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28642047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com