gpt4 book ai didi

c++ - c++中分配器和内置数组的区别?

转载 作者:行者123 更新时间:2023-11-28 02:31:44 24 4
gpt4 key购买 nike

我最近一直在尝试创建类似于某些库容器(即 vector 、列表)的自定义容器。当我使用分配器分配动态内存时,我注意到分配器和内置数组背后的想法是相同的。分配器保留一定数量的原始、未构造的动态内存,并返回指向该内存池中第一个空闲位置的指针。和内置数组几乎做同样的事情。所以如果我们有一个名为 alloc 的字符串 std::allocator此代码alloc.allocate(7) 和此代码string* array = new string[7] 应该具有相同的效果。如果我们想构造原始内存,我们可以调用 std::allocator::construct 传递给它从 allocate 函数返回的指针,或者我们可以有类似 array[0] = string("something") 做同样的事情。正确的?那么分配器的工作方式与内置数组的工作方式有什么区别?

最佳答案

你是对的,它们在根本上是相关的,但不是那种方式。 new string[7] 确实可以分解为 allocateconstruct(还有一些额外的位用于 EH 和其他细节)。

在分配器接口(interface)中将它们分开允许对容器进行更细粒度的控制,这样它们就可以,例如,在其中包含非构造对象的内存,这对于正确的性能保证或语义通常至关重要。

此外,分配器接口(interface)当然是一个具有许多可能实现的接口(interface),例如内存区域或对象池,new string[7] 确实没有'报价。

最后,new T[] 很烂,永远不要使用它。分配器接口(interface)被设计为仅供相当有经验的程序员以非常有限的方式使用——作为更好的库组件的一个组件。 new T[] 是一种每个人都可以使用的语言特性,但结果很糟糕。

关于c++ - c++中分配器和内置数组的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28799256/

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