首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在C++中使用std::allocator而不是new的优点是什么?

在C++中使用std::allocator而不是new的优点是什么?
EN

Stack Overflow用户
提问于 2015-07-11 15:36:06
回答 8查看 26K关注 0票数 92

我刚读到关于std::allocator的文章。在我看来,使用它比使用newdelete要复杂得多。

使用allocator,我们必须显式地分配堆内存,构造它,销毁它,然后最后释放内存。那么它为什么被创造出来呢?

在哪些情况下可以使用它,什么时候应该使用它而不是新的和删除的?

EN

Stack Overflow用户

回答已采纳

发布于 2015-07-11 15:57:23

std::allocator是标准库容器的默认内存分配器,您可以替换自己的分配器。这允许您控制标准容器如何分配内存。但我不认为您的问题是专门关于std::allocator的,而是分配内存的策略,然后在该内存中构造对象,而不是使用new T[N]

其原因是new T[N]不允许您控制调用什么构造函数。它迫使你同时构造你的所有对象。这对于例如std::vector来说是很糟糕的,在这里您只想偶尔分配。

使用原始内存分配器,您可以分配一定数量的内存,这决定了您的容量。然后,当用户将项添加到向量(使用他们选择的构造函数)时,您可以在这个内存中构造合适的对象。

然后,当内存耗尽时,分配的内容会更多,通常是原来的两倍。如果std::vector使用new T[N],那么每当您想要添加或删除元素时,它都必须重新分配,这对性能影响很大。您还将被迫对所有对象使用默认构造函数,这对std::vector可以容纳的对象类型设置了不必要的限制。

票数 70
EN
查看全部 8 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31358804

复制
相关文章

相似问题

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