首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >智能指针内存池

智能指针内存池
EN

Stack Overflow用户
提问于 2015-02-21 12:21:27
回答 2查看 1.4K关注 0票数 1

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

目前出现的解决方案似乎是一种智能指针实现,它继续使用幕后的原始内存池。我找不到任何正在使用的智能指针/内存池组合。有没有人能给我举一个这样的例子呢?在尝试之前,有什么我应该注意的陷阱/注意事项吗?

EN

回答 2

Stack Overflow用户

发布于 2015-02-21 13:00:44

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

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

默认操作是使用'delete',但您也可以提供自己的‘自定义删除程序’。

例如:

代码语言:javascript
复制
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至少有一篇关于自定义参数使用的教程。

票数 3
EN

Stack Overflow用户

发布于 2015-02-21 12:50:38

Andrei Alexandrescu的有一个关于智能指针的很好的章节。书中描述的Loki库提供了模板,这些模板使用策略类来调整智能指针的行为,以满足您的特定需求。

请注意,它们与C++11的std::shared_ptr是不同的,并且与它们不兼容。根据您的维护需求,将Loki合并到您的代码库中可能不是一个合理的选择。但书中的概念在任何情况下都值得探索。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28642047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档